TCP/IP
网络
很长很长的名字
这个作者很懒,什么都没留下…
展开
-
高并发服务器的TIME_WAIT问题
这里探讨一下由于并发过大导致大量TIME_WAIT的问题以及解决方案要说明TIME_WAIT的问题,需要解答以下几个问题:1. Peer两端,哪一端会进入TIME_WAIT呢?为什么?相信大家都知道,TCP主动关闭连接的那一方会最后进入TIME_WAIT。那么怎么界定主动关闭方呢?是否主动关闭是由FIN包的先后决定的,就是在自己没收到对端Peer的FIN包之前自己发出了FIN包,那么自己就是主动关闭连接的那一方?Peer两边都是主动关闭的一方,两边都会进入TIME_WAIT。为什么是主动关闭的一方进行原创 2020-07-31 12:08:04 · 1096 阅读 · 0 评论 -
拥塞控制
概念拥塞控制是TCP避免网络拥塞的算法,是互联网上主要的一个拥塞控制措施。主要的目标是***提高网络利用率、降低丢包率、保证网络资源对每条数据流的公平性*。它使用一套基于线增积减模式的多样化网络拥塞控制方法(包括慢启动和拥塞窗口等模式)来控制拥塞。在互联网上应用中有相当多的具体实现算法。拥塞算法TCP Tahoe/Reno最初的实现,包括慢启动、拥塞避免两个部分。基于重传超时(retransmission timeout/RTO)和重复确认为条件判断是否发生了丢包。两者的区别在于:Tahoe算法原创 2020-07-30 10:44:20 · 6756 阅读 · 0 评论 -
三次握手
为什么恰好是三次握手?TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,三次恰好可以满足上述的需求。而三次也是保证双方能够明确对方能收发的最低值。第一次: C->S,S可以确认C的发送正常第二次: C<-S,C可以确认S的收发正常第三次: C->S,S可以确认C的接收正常理论上讲不论握手多少次都不能确认一条信道是"可靠"的,但通过3次握手可以至少确认它是"可用"的,再往上加握手次数不过是提高"它是可用的"这个结论的可信程度。包分析有关安.原创 2020-07-24 09:43:19 · 160 阅读 · 0 评论 -
TCP 首部格式
源端口表示发送端端口,字段长度16位。目标端口表示接收端端口,字段长度16位。序列号(Sequence Number)字段长32位。指发送数据的位置。每发送一次数据,就会累加一次该数据字节的大小。序列号不会从0或1开始,建立连接时计算机随机生成初始值,通过SYN包传给接收端主机。然后将每转发过去的字节数累加到初始值上表示数据位置。此外,在建立连接和断开连接时发送SYN包和FIN...原创 2019-08-28 14:17:16 · 410 阅读 · 0 评论 -
UDP 首部格式
源端口:表示发送端端口,字段长度16位。可选项,有时候可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中。目标端口:表示接收端端口,字段长度16位。包长度:该字段保存了UDP首部的长度跟数据长度之和。单位为字节(8位的字节),实际最大长度不可能超过65507字节 2^16(635535) - 8字节UDP报头 − 20字节IP头部校验和:校...原创 2019-08-27 18:37:04 · 5224 阅读 · 0 评论 -
ICMP协议 (Internet Control Message Protocol)
互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。报文类型ICMP协议的消息大致分为两类:Type(出错原因的错误消息)Code(诊断的查询消息)...原创 2019-08-22 12:11:18 · 1570 阅读 · 0 评论 -
IPv4 头
版本:由4比特构成标识IP首部的版本号,关于IP的所有版本如下图首部长度、报头长度(IHT):由4比特构成。表示IP报头的大小,单位4字节。对于没有可选项的IP包,首部长度设置为"5",也就是当没有可选项时,IP首部长度为20字节区分服务(服务类型):由8比特构成,用于表示服务质量。总长度:表示IP首部与数据部分合起来的总字节数,该段16比特,包最大长度2^...原创 2019-08-16 15:53:48 · 812 阅读 · 0 评论 -
ARP协议(Address Resolution Protocol)
ARP概要ARP是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议。确定了IP地址,就可向这个地址发送IP数据报。然而,在数据链路层,进行实际通信时必须要知道每个IP地址对应的MAC地址。以目标IP地址为线索,用来定位接收数据包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。ARP只适用于IPv4,不能用于IPv6。IPv6...原创 2019-08-21 14:12:22 · 2264 阅读 · 0 评论 -
IPv6 头
版本和IPv4一样,4比特构成。其版本号为6,因此这个字段上的值为"6"通信量类(Traffic Class)相当于IPv4的TOS字段流标号(Flow Label)20比特构成,用于服务质量控制。使用这个字段提供怎么样的服务已经成为未来的研究课题,不使用Qos时每一位可以全部设为0。进行服务控制时,将流标号设置为一个随机数,然后利用一种可以设置流的协议RSVP在路由器...原创 2019-08-20 11:22:50 · 961 阅读 · 0 评论 -
TCP 超时重传
简介:如果一个包真的丢了,又没有后续包可以在接收方触发dup ack,就不会快速重传,这种情况只好等到超时了再重传如上图:服务器发送了原始包22580,之后一直等不到相应的ack,于是之后重传(包22698)TCP可靠性中最重要的一个机制是处理数据超时和重传。TCP协议要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;接收端成功接收新数据后返回确认信息。若在定时器超时前数据未能...原创 2019-07-01 14:18:50 · 499 阅读 · 0 评论 -
TCP 快速重传
简介:当发送方收到三个或以上的冗余ACK(duplicate ACK),就意识到之前发的包可能丢了,于是快速重传它如图所示,报文段1成功接收并被确认ACK 2,接收端的期待序号为2,当报文段2丢失,报文段3失序到来,与接收端的期望不匹配,接收端重复发送冗余ACK 2。上图服务器收到4个Ack=49967670,于是在52059号包重传了Sep=49967670...原创 2019-07-01 10:49:28 · 3729 阅读 · 0 评论 -
TCP 的 MTU & MSS
MTU:最大传输单元,大多数网络MTU是1500字节,有些网络启用了巨帧,能达到9000字节。MSS:最大分段大小(TCP数据包每次能够传输的最大报文段长度)TCP不会简单地把数据一口气传给网络互联层,而是根据双方的MTU决定每次传多少,如果获得双方的MTU呢?三次握手时双方会把自己的MSS告诉对方,MSS+TCP头+IP头,就得到MTU了151包里客户端声明mss是1460,意...原创 2019-07-05 16:52:08 · 4589 阅读 · 0 评论 -
TCP Window Scale 与 接收窗口
TCP刚发明的时候,全世界的网络带宽都很小,所以最大的接受窗口被定义成65535字节,随着硬件的革命性进步,65535已经成为性能瓶颈,而TCP头只给接收窗口值留了16bit,解决方案就是在三次握手时是,把自己的Window Scale告知对方。Window Scale放在TCP头之外的Options中,向对方声明一个Shilt count,把它作为2的指数,再剩以TCP头中定义的接收窗口,就得到...原创 2019-07-10 11:36:20 · 10512 阅读 · 1 评论 -
TCP 滑动窗口
TCP滑动窗口主要有两个作用,可靠性、流控滑动窗口的基本概念A-B之间新建立了一条tcp连接,A需要发送一段很大的数据流,B无法一次性接受,所以它限制设备A每次发送数据分段的数量,每次分段中已发送的字节数得到确认之后,就会左移开始下一个分段。任一时间点对于这一过程,发送方可以将TCP buffer中的数据分为以下四类,并把它们看作一个时间轴1. 已发送已确认2. 已发送但尚未确认3...原创 2019-07-09 18:20:09 · 4359 阅读 · 3 评论 -
TCP 延迟确认
简单描述:收到一个包之后,暂时没有什么数据要发给对方,延迟一段时间之后再确认(一般200ms以上),假如在这段时间里恰好有数据要发送,那确认信息和数据就可以在一个包里面发出去了上图是开启了延迟确认,等待200ms再回复确认下图是关闭了延迟确认,收到后就马上回复ack好处:假如在延迟确认这段时间里刚好有包要发,就可以在发数据的时候把确认信息带过去,省了一个纯粹的确认包,很多...原创 2019-06-20 10:14:54 · 2263 阅读 · 0 评论