特性
- 工作在传输层
- 面向连接协议
- 全双工协议
- 半关闭
- 错误检查
- 将数据打包成段,排序
- 确认机制
- 数据恢复,重传
- 流量控制,滑动窗口
- 拥塞机制,慢启动和拥塞避免算法
TCP包头
协议端口
-
/etc/services
文件保存了服务和端口的对应关系,我们自己应用取端口名时候可以看下是否和服务有冲突。 - 传输层通过
PORT
端口号,端口号是2^16
也就是0-25535
,确认应用层协议。 - 传输控制协议,面向连接的协议;通信前需要建立虚拟链路,结束后拆出链路。
- IANA:互联网数字分配机构(负责域名,数字资源,协议分配等)。
0-1023
:系统端口或者特权端口(仅管理员可用)。众所周知,永久分配给固定的系统应用使用。22/tcp(ssh),80/tcp(http),443/tcp(https)
1024-49151
: 用户端口或者注册端口,但要求不严格,可用分配给程序注册为某应用使用
1433/tcp(sqlserver),3306/tcp(mysql),11211/tcp(memecached)
491512-65535
:动态端口或者私有端口,客户端程序随机使用的端口(给客户端用,随机取的)
其范围定义在文件/proc/sys/net/ipv4/ip_local_port_range
中
面向连接可靠性
- ACK: 当ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
- SYN: 当连接建立时用来同步序号。当SYN=1而且ACK=0时,表示这是一个连接请求报文。对方如果同意建立连接,则响应报文中使SYN=1而ACK=1.因此SYN置1就表示这是一个连接请求或者连接接受报文
- FIN: 是终结的意思,用来释放一个连接。当
FIN=1
时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
使用wireshark抓包图解
-
三次握手概览
-
TCP传输层协议概览
-
第一次握手标志位
-
第二次握手标志位
-
第三次握手
如何判断是三次握手的第一次握手
只需要看SYN=1其他的标志位都为0的情况-
四次挥手
TCP 超时重传
- 异常网络下(出现超时或者丢包),TCP 控制数据传输以保证其承若的可靠服务
- TCP服务必须能够重传超时时间内未收到确认的TCP报文段。TCP模块为每个TCP报文维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内没有收到接收方应答,TCP模块将重传TCP报文并充值定时器。
- 重传策略:
/proc/sys/net/ipv4/tcp_retries1
最少重传次数,默认为3
/proc/sys/net/ipv4/tcp_retries2
最少重传次数,默认为15