随笔分类 -  tcp/ip

摘要:陈硕 (giantchen AT gmail) blog.csdn.net/Solstice 前几天我在新浪微博上出了两道有关 TCP 的思考题,引发了一场讨论 http://weibo.com/1701018393/eCuxDrta0Nn 。 第一道初级题目是: 有一台机器,它有一个 IP,上面运 阅读全文
posted @ 2020-08-15 22:38 大老虎打老虎 阅读(433) 评论(0) 推荐(0) 编辑
摘要:如果一个 TCP 连接的一端启用了 Nagle‘s Algorithm,而另一端启用了 TCP Delayed Ack,而发送的数据包又比较小,则可能会出现这样的情况:发送端在等 待接收端对上一个packet 的 Ack 才发送当前的 packet,而接收端则正好延迟了 此 Ack 的发送,那么这个 阅读全文
posted @ 2020-05-18 10:20 大老虎打老虎 阅读(2807) 评论(0) 推荐(0) 编辑
摘要:对于一个可靠的IM系统,需要保证消息的百分之百到达对端。即使是在极端情况下丢失一条消息也是不能容忍的。一个极其极其低概率的事件,若是放大到分布式系统中,那这个概率事件就成了必然事件。在开发测试中如果发现一次偶然的消息丢失问题而忽略不查,那上线之后就必然会发生消息丢失。所以作为技术,一定不能放过任何一 阅读全文
posted @ 2020-05-09 14:01 大老虎打老虎 阅读(531) 评论(0) 推荐(0) 编辑
摘要:转 https://www.jianshu.com/p/4781cf9ffce8 IM App 是我做过 App 类型里复杂度最高的一类,里面可供深究探讨的技术难点非常之多。这篇文章和大家聊下消息可靠抵达机制。 如何确保 IM 不丢消息是个相对复杂的话题,从客户端发送数据到服务器,再从服务器抵达目标 阅读全文
posted @ 2020-05-09 13:55 大老虎打老虎 阅读(363) 评论(0) 推荐(0) 编辑
摘要:原地址https://blog.csdn.net/ligupeng7929/article/details/79597423 因此我们先了解一下16位的窗口大小究竟有什么作用。 窗口分为滑动窗口和拥塞窗口。 滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数 阅读全文
posted @ 2020-02-07 21:15 大老虎打老虎 阅读(1455) 评论(0) 推荐(0) 编辑
摘要:最近在用socket时,再次思考了一下如何确保对方收到消息的问题 下面是一些不错的回答 https://www.zhihu.com/question/25016042/answer/73785738 其实我已经说得很清楚了,其实就相当于文件传输的断点续传。你没有必要每次send成功后,去等待服务端发 阅读全文
posted @ 2019-11-08 19:16 大老虎打老虎 阅读(593) 评论(0) 推荐(0) 编辑
摘要:影响TCP 网络时延的因素硬件速度网络和服务器的负载请求和响应报文的尺寸客户端和服务器之间的距离TCP 协议的技术复杂性TCP协议产生的时延TCP 连接建立握手;TCP 慢启动拥塞控制;数据聚集的 Nagle 算法;用于捎带确认的 TCP 延迟确认算法;TIME_WAIT 时延和端口耗尽。TCP连接 阅读全文
posted @ 2019-08-17 01:21 大老虎打老虎 阅读(4151) 评论(0) 推荐(0) 编辑
摘要:三次重复的ACK,可能是丢包引起的,丢包可能是网络拥塞造成的,也可能是信号失真造成的。 三次重复的ACK,也有可能是乱序引起的,而乱序和网络拥塞没有直接关系。 如果就写这两行,感觉什么都没写,接下来的文字详细解释这两行文字。 TCP背景知识 客户端有1M的文件需要上传到服务器上,问题来了,这个大文件 阅读全文
posted @ 2019-06-26 11:21 大老虎打老虎 阅读(1943) 评论(0) 推荐(0) 编辑
摘要:TCP主动关闭连接 appl: close(), --> FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN <-- ACK FIN_WAIT_2 //对方操作系统的TCP层,给ACK响应。然后给FIN <-- FIN --> ACK "TIME_WA 阅读全文
posted @ 2019-06-22 13:00 大老虎打老虎 阅读(20661) 评论(0) 推荐(3) 编辑
摘要:某天晚上睡觉前突然想到 tcp的ACK确认是单独发的还是和报文一起发的,下面看一下别人的解答 一、ACK定义TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表示已经确认接收到ACK确认号前面的所有数据。ACK字段长度为32位,能表示0~2^32-1之间的值。 二、ACK作用发送方在一定 阅读全文
posted @ 2019-06-21 10:25 大老虎打老虎 阅读(14009) 评论(0) 推荐(2) 编辑
摘要:学习libevent有助于提升程序设计功力,除了网络程序设计方面外,libevent的代码里有很多有用的设计技巧和基础数据结构,比如信息隐藏、函数指针、c语言的多态支持、链表和堆等等,都有助于提升自身的程序功力。 程序设计不止要了解框架,很多细节之处恰恰也是事关整个系统成败的关键。只对libeven 阅读全文
posted @ 2019-04-02 10:05 大老虎打老虎 阅读(2727) 评论(0) 推荐(0) 编辑
摘要:实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include < 阅读全文
posted @ 2019-03-19 11:36 大老虎打老虎 阅读(5384) 评论(0) 推荐(0) 编辑
摘要:1.选择(select)模型:选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字。让套接字进行工作。 选择模型的核心是FD_SET集合和select函数。通过该函数,我们可以们判断套接字上是否存在数据,或者能否向一个套接字写入数据。 用途:如果我们想接受多个SOCKET的数 阅读全文
posted @ 2019-03-14 10:03 大老虎打老虎 阅读(1681) 评论(0) 推荐(0) 编辑
摘要:今天看到一个文章,客户端的connect在服务端调用accept之前,突然想到这可以建立正常的连接么?以前从没细细的思考过listen accept connect之前的关系,带着疑问学习了一下,记录 先把结论亮出来 accept的功能并不是建立连接,而是从当前连接的等待队列中获取一条连接所以即使不 阅读全文
posted @ 2019-03-12 10:03 大老虎打老虎 阅读(2543) 评论(0) 推荐(0) 编辑
摘要:首先说明一点,要想在不同网段收到多播信息,得把网关的多播功能开发才可行! 为什么要使用多播: 网卡从网络上接收到目标物理地址对应的所有bit位都为1的数据报时,会收到这条消息并将其上传给驱动程序,网卡的这种工作模式称为广播模式,网卡的缺省工作模式包含直接模式和广播模式。利用这一特性,UDP(用户数据 阅读全文
posted @ 2018-08-03 15:47 大老虎打老虎 阅读(4575) 评论(0) 推荐(0) 编辑
摘要:tcp长连接分包的四种方法1.消息长度固定2.使用特殊的字符串作为消息边界。比如http协议的headers以“\r\n”为字段的分隔符3.在每条消息的头部加一个长度字段。这是最常见的4.利用消息本身的格式来分包。比如xml中的<root></root>的配对等 说一下在头部加消息长度字段分包的方法 阅读全文
posted @ 2018-07-24 09:46 大老虎打老虎 阅读(3104) 评论(2) 推荐(1) 编辑
摘要:队列及参数 tcp-sync-queue-and-accept-queue-small.jpg server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包开设一个条目(服务端在接收到SYN包的时候,就已经创建了request_sock结构,存储 阅读全文
posted @ 2018-07-05 18:59 大老虎打老虎 阅读(491) 评论(0) 推荐(1) 编辑
摘要:1.常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序 阅读全文
posted @ 2018-07-05 15:23 大老虎打老虎 阅读(241) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示