传输层协议(二)

目录

1.TCP头部格式 

 2.TCP连接建立:三次握手

1.第一次握手

2.第二次握手

3.第三次握手


1.TCP头部格式 

  •  控制位
  1. URG (紧急位) :表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer) 只有当URG=1时才有效
  2.  ACK (确认位) :表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后, ACK必须为1 ,带ACK标志的TCP报文段称为确认报文段
  3. PSH (急切位) : 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
  4. RST (重置位) :如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃), 必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
  5. SYN (同步位) :在建立连接时使用,用来同步序号。当SYN=1, ACK=0时,表示这是一个请求建 立连接的报文段;当SYN=1, ACK=1时,表示对方同意建立连接。SYN=1, 说明这是一一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
  6. FIN (断开位) :表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1, 即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
  • 窗口大小: 表示现在允许对方发送的数据量, 也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量, 达到此值,需要ACK确认后才 能再继续传送后面数据,由Window size value * Window size scaling factor (此值在三次握手阶段TCP选项Window scale协商得到)得出此值
  • 校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置
  • 选项部分: 其最大长度可根据TCP首部长度进行推算。 TCP首部长度用4位表示,选项部分最长为: (2^4-1)*4-20=40字节

 2.TCP连接建立:三次握手

TCP三次握手过程:

 

 

TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的

1.第一次握手

        TCP客户端向TCP服务器端发送连接请求报文SYN(seq=x),进入同步已发送状态(SYN_SEND),等待TCP服务器回应。TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段。序号字段seq被设置了一个初始值x,作为TCP客户进程选择的初始序号。注意:TCP规定SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号。由于TCP连接建立是由TCP客户主动发起的,因此被称为主动打开连接。

2.第二次握手

       TCP服务器端收到TCP客户端连接请求报文SYN(seq=x)后,将客户端的请求包SYN(seq=x)放入到自己的未连接队列,如果同意建立连接,此时TCP服务器需要发送两个内容给客户端;

  1.   向TCP客户端发送确认自己收到其连接请求的确认包ACK(ack=x+1),向客户端表明已知道了其连接请求。(这里ack值为x+1是对TCP客户进程所选择的初始序号的确认)
  2. 向TCP客户端发送连接询问请求包SYN(seq=y),询问客户端是否已经准备好建立连接,进行数据通信。(这里序号值随机,作为TCP服务器进程选择的初始序号)即在第二次握手时TCP服务器向TCP客户端发送ACK(ack=x+1)+SYN(seq=y)包,该报文段首部中的同步位SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报段。发送完该报文段此时服务器进入同步已接收状态(SYN_RCVD)。请注意:这个报文段不能携带数据,因为它是SYN被设置为1的报文段,但同样要消耗掉一个序号。

3.第三次握手

       TCP客户端收到TCP服务器的ACK(ack=x+1)+SYN(seq=y)报文后,知道了服务器同意建立连接,此时还需要发送连接已建立的消息给服务器。向服务器发送普通的TCP确认报文段,该报文段首部中的确认位ACK设置为1,序号字段seq被设置为x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x,并且不携带数据,因此第二个报文段的序号为x+1。确认号字段ack被设置为y+1,这是对TCP服务器进程选择的初始序号的确认。发送该报文目的就是告诉服务器,我们之间已经建立了连接,可以进行数据通信。请注意:该报文是一个普通的TCP确认报文段,TCP规定普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号。我们这里一般不携带数据,所以在这种情况下,发送的下个数据报的序号仍是x+1。ACK(seq=x+1,ack=y+1)报文发送完毕,服务器收到后,此时服务器与客户端进入ESTABLISHED状态,开始进行数据传送。

  

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值