四、Linux网络编程-TCP/IP基础(四)传输层协议TCP、TCP报文格式、连接三次握手、终止四次挥手

一、TCP特点
(1)基于字节流
 TCP传输的单位是段,基于字节流意味着对段的边界不做任何假定,TCP没有提供边界处理,所以TCP需要处理粘包问题。
(2)、面向连接
 需要建立连接
(3)、可靠传输
 网际校验和
(4)、缓冲传输
    缓存数据,找到合适时机发送,提高效率
(5)、全双工
(6)、流量控制
    滑动窗口机制
二、TCP报文格式

源端口号与目的端口号  源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接。

序号  序号表示在这个报文段中的第一个数据字节序号。

确认号  仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。

头部长度  4位,TCP头部最多60个字节

保留位  6位,必须为0

6个标志位
  • URG-紧急指针有效
  • ACK-确认序号有效
  • PSH-接收方应尽快将这个报文段交给应用层
  • RST-连接重置
  • SYN-同步序号用来发起一个连接
  • FIN-表示将要终止一个连接

窗口大小  通过窗口大小来达到流量控制。

校验和  对tcp头与数据进行校验。

紧急指针  是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。

选项与填充(选项为4字节整数倍,否则用0填充)  最常见的可选字段是最长报文大小MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。该选项如果不设置,默认为536(20+20+536=576字节的IP数据报)

三、连接建立三次握手
(1)、三次握手

首先A发送一个TCP a段到B,B收到之后确认收到了A发送的TCP段a,但是B不知道A有没有收到,所以B又发送一个TCP段b,并带上一个确认号a+1,表示期望收到的下一次数据的编号是b+1。然后A向B发送编号为b+1的段,连接建立完成。
四、连接终止四次握手

(1)、首先A发送一个序号为x的FIN TCP段,确认号为y,表示下次期望收到的数据序号为y。
(2)、B对A发送的序号为x的数据进行确认,确认号为x+1.
(3)、B发送一个序号为y的FIN TCP段,确认号为x+1,表示下次期望收到的数据序号为x+1。
(4)、A对B发送的序号为y的数据进行确认,确认号为y+1.
五、TCP如何保证可靠性
不可靠主要包括:差错(校验和)、丢包(超时重传)、失序、重复
  • 应用数据被分割成TCP认为最适合发送的数据块,称为段传递给IP层。
  • 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  • 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
  • TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段并且不确认(导致对方超时重传)
  • TCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行重新排序。
  • IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
  • TCP还能提供流量控制。TCP连接的每一方都有一定大小的缓冲空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值