自己建立网站多少钱,深圳网站设计精选刻,免费的个人简历模板wps,汕头论坛建站模板文章目录 4.17 TCP三次握手4.18滑动窗口4.19TCP四次挥手 4.17 TCP三次握手
TCP 是一种面向连接的单播协议#xff0c;在发送数据前#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息#xff… 文章目录 4.17 TCP三次握手4.18滑动窗口4.19TCP四次挥手 4.17 TCP三次握手
TCP 是一种面向连接的单播协议在发送数据前通信双方必须在彼此间建立一条连接。所谓的“连接”其实是客户端和服务器的内存里保存的一份关于对方的信息如 IP 地址、端口号等。
TCP 可以看成是一种字节流它会处理 IP 层或以下的层的丢包、重复以及错误问题。在连接的建立过程中双方需要交换一些连接的参数。这些参数可以放在 TCP 头部。
TCP 提供了一种可靠、面向连接、字节流、传输层的服务采用三次握手建立一个连接。采用四次挥手来关闭一个连接。
16 位端口号port number告知主机报文段是来自哪里源端口以及传给哪个上层协议或应用程序目的端口的。进行 TCP 通信时客户端通常使用系统自动选择的临时端口号。32 位序号sequence number一次 TCP 通信从 TCP 连接建立到断开过程中某一个传输方向上的字节流的每个字节的编号。假设主机 A 和主机 B 进行 TCP 通信A 发送给 B 的第一个TCP 报文段中序号值被系统初始化为某个随机值 ISNInitial Sequence Number初始序号值。那么在该传输方向上从 A 到 B后续的 TCP 报文段中序号值将被系统设置成 ISN 加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如某个 TCP 报文段传送的数据是字节流中的第 1025 ~ 2048 字节那么该报文段的序号值就是 ISN 1025。另外一个传输方向从B 到 A的 TCP 报文段的序号值也具有相同的含义。32 位确认号acknowledgement number用作对另一方发送来的 TCP 报文段的响应。其值是收到的 TCP 报文段的序号值 标志位长度SYNFIN 数据长度 。假设主机 A 和主机 B 进行TCP 通信那么 A 发送出的 TCP 报文段不仅携带自己的序号而且包含对 B 发送来的 TCP 报文段的确认号。反之B 发送出的 TCP 报文段也同样携带自己的序号和对 A 发送来的报文段的确认序号。4 位头部长度head length标识该 TCP 头部有多少个 32 bit(4 字节)。因为 4 位最大能表示15所以 TCP 头部最长是60 字节。6 位标志位包含如下几项 URG 标志表示紧急指针urgent pointer是否有效。 ACK 标志表示确认号是否有效。我们称携带 ACK 标志的 TCP 报文段为确认报文段。Acknowledge character PSH 标志提示接收端应用程序应该立即从 TCP 接收缓冲区中读走数据为接收后续数据腾出空间如果应用程序不将接收到的数据读走它们就会一直停留在 TCP 接收缓冲区中。 RST 标志表示要求对方重新建立连接。我们称携带 RST 标志的 TCP 报文段为复位报文段。 SYN 标志表示请求建立一个连接。我们称携带 SYN 标志的 TCP 报文段为同步报文段。Synchronize Sequence Numbers FIN 标志表示通知对方本端要关闭连接了。我们称携带 FIN 标志的 TCP 报文段为结束报文段。Finished 16 位窗口大小window size是 TCP 流量控制的一个手段。这里说的窗口指的是接收通告窗口Receiver WindowRWND。它告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据这样对方就可以控制发送数据的速度。 16 位校验和TCP checksum由发送端填充接收端对 TCP 报文段执行 CRC 算法以校验TCP 报文段在传输过程中是否损坏。注意这个校验不仅包括 TCP 头部也包括数据部分。这也是 TCP 可靠传输的一个重要保障。 16 位紧急指针urgent pointer是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一个字节的序号。因此确切地说这个字段是紧急指针相对当前序号的偏移不妨称之为紧急偏移。TCP 的紧急指针是发送端向接收端发送紧急数据的方法。
时序图 三次握手的目的是保证双方互相之间建立了连接。 双方都要确认四个信息自己的首发和对方的收发。 三次握手发生在客户端连接的时候当调用connect()底层会通过TCP协议进行三次握手。 第一次握手 1、客户端将SYN标志位置为1 2、生成一个随机的32位的序号seqJ这个序号后边是可以携带数据数据的大小 第二次握手 1、服务端接收客户端的连接ACK1 2、服务端会发出一个确认序号ack客户端的序号数据长度SYN/FIN按一个字节算 3、服务端会向客户端发起连接请求SYN1 4、服务端会生成一个随机序号seqK 第三次握手 1、客户端应答服务器的连接请求ACK1 2、客户端回复收到了客户端的数据ack服务端的序号数据长度SYN/FIN按一个字节算
前两次握手是带不了数据的最后一次握手其实是可以携带数据的。 seq:sequence 序号 sseqserver sequence cseqclient sequence ackacknowledge 确认号 只有当接收到报文段里面的SYN或者FIN置1的时候确认方Ack发起方Req1 在初始三次握手的时候cseq和sseq都是按照一定规律的随机数。 以第一次发送数据为例 此时的cseq 上一轮的sack 也就是1001100表示这一次要发送100字节。 服务器收到以后就返回一个sack 上一个cseq数据大小 1001100 1101。 每一个数据包都会被分配一个序号这样32位序号和32位确认号就保证了数据报的顺序和完整性。 4.18滑动窗口
滑动窗口(Sliding window是一种流量控制技术。早期的网络通信中通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况同时发送数据导致中间节点阻塞掉包谁也发不了数据所以就有了滑动窗口机制来解决此问题。滑动窗口协议是用来改善吞吐量的一种技术即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。 滑动窗口(滑动窗口)是一种流量控制技术.早期的网络通信中通信双方不会考虑网络的拥挤情况直接发送数据.由于大家不知道网络拥塞状况同时发送数据导致中间节点阻塞掉包谁也发不了数据所以就有了滑动窗口机制来解决此问题.滑动窗口协议是用来改善吞吐量的一种技术即容许发送方在接收任何应答之前传送附加的包.(接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。
TCP中采用滑动窗口来进行传输控制滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时发送方一般不能再发送数据报。 Tcp中采用滑动窗口来进行传输控制滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据.当滑动窗口为0时发送方一般不能再发送数据报.
滑动窗口是TCP中实现诸如ack确认、流量控制、拥塞控制的承载结构.
窗口理解为缓冲区的大小 滑动窗口的大小会随着发送数据和接收数据而变化。 通信双方都有发送缓冲区和接收数据的缓冲区 服务器 发送缓冲区发送缓冲区的窗口 接收缓冲区接收缓冲区的窗口 客户端 发送缓冲区发送缓冲区的窗口 接收缓冲区接收缓冲区的窗口 上图中 发送方的缓冲区 白色格子空闲的空间 灰色格子数据已经被发送出去但是还没有被接收 紫色格子还没有发送出去的数据
接收方的缓冲区 白色格子空闲的空间 紫色格子已经接收到的数据 MSSMaxmiun segment size:一条数据的最大数据量 win:滑动窗口大小window 1、第一次握手客户端向服务端发起连接客户端的滑动窗口是4096一次发送的最大数据量是1460 2、第二次握手服务端接收连接情况告诉客户端服务器窗口大小是6144一次发送的最大数据量是024 3、第三次握手 4、4-9连续给服务器发送了6K的数据每次发送1K 5、第10次服务端告诉客户端发送的6K数据已经收到存储在缓冲区缓冲区已经处理了2K窗口大小是2K 6、第11次服务端告诉客户端发送的6K数据已经收到存储在缓冲区缓冲区已经处理了4K窗口大小是4K 7、第12次客户端给服务端发送了1K的数据 8、第一次挥手第13次客户端主动请求和服务端断开连接并且给服务器发送了1K的数据 9、第二次挥手第14次服务端回复ACK:8194(716910241 这个1表示收到了客户端发来的FIN)同意断开连接的请求告诉客户端已经接收到方才发送的2K数据滑动窗口2K 10、第15、16次通知客户端滑动窗口的大小 11、第17次第三次挥手服务端向客户端发送FIN请求断开连接 12、第18从第四次挥手客户端同意了服务端的断开请求
4.19TCP四次挥手
四次挥手在程序中当调用close()会使用TCP协议进行四次挥手。 客户端和服务端都可以主动发起断开连接谁先调用close()谁就发起。 因为在TCP连接的时候采用三次握手建立的连接是双向的在断开的时候需要双向断开。