实验楼_TCP/IP网络协议基础_Note05_S6

S6 传输层:TCP协议

一、TCP特点

面向连接

可靠传输:无差错、不丢失、不重复、按顺序

点对点:TCP连接的两端都设有发送缓存和接收缓存

全双工



二、TCP报文段结构

TCP报文段的报头有前20字节的固定部分,后面4n字节是根据需要而添加的字段。

TCP报文头部结构

1. 序号:占4字节序,序号范围[0,2^32-1],序号增加到 2^32-1 后,下个序号又回到0。

2. 控制位:共有6个控制位,说明本报文的性质,意义如下:

①URG紧急:当URG=1时,它告诉系统此报文中有紧急数据,应优先传送(比如紧急关闭),这要与紧急指针字段配合使用。

②ACK确认:仅当ACK=1时确认号字段才有效。建立TCP连接后,所有报文段都必须把ACK字段置为1。

③PSH推送:若TCP连接的一端希望另一端立即响应,PSH字段便可以“催促”对方,不再等到缓存区填满才发送。

④RET复位:若TCP连接出现严重差错,RST置为1,断开TCP连接,再重新建立连接。

⑤SYN同步:用于建立和释放连接。

⑥FIN中止:用于释放连接,当FIN=1,表明发送方已经发送完毕,要求释放TCP连接。



三、连接建立与释放

1. 三次握手

三次握手过程示意图


2. 四次挥手

四次挥手过程示意图



四、其他

1. 超时重传与连续ARQ协议

2. 流量控制和拥塞控制




S6作业  尝试抓取一TCP数据报,并解读其内容


STEP 01

需要下载从github下载代码,是基于TCP的聊天小程序,分为server(服务端)和client(客户端):

$cd Desktop
$git clone https://github.com/shiyanlou/tcp_ip_6
$cd tcp_ip_6
$gcc -o server server.c
$gcc -o client client.c


STEP 02

编译完成后先不要运行,先打开tcpdump,使用命令安装并运行tcpdump:

$sudo apt-get update
$sudo apt-get install tcpdump
$sudo tcpdump -vvv -X -i lo tcp port 7777


STEP 03

最小化运行tcpdump的终端,然后另开一个终端,运行server程序:

$cd Desktop/tcp_ip_6
$./server 127.0.0.1


STEP 04

然后再打开第三个终端,运行client程序:

$cd Desktop/tcp_ip_6
$./client 127.0.0.1


STEP 05

现在,使用client和server聊天,轮流互发几条简短的消息(比如hello、hi之类的)便可以关闭client和server,回到运行tcpdump的终端查看抓取的报文段内容:

1. server与client建立连接

建立连接


观察一下建立连接的【三次握手】

三次握手

值



2. 相互发送消息

hi

hello



3. 断开连接

断开连接


观察一下断开连接的【四次挥手】

四次挥手

值


说明1:

说明

图片来源:实验楼


说明2:

分布

黄色为TCP报文头部

紫色为TCP报文段的数据部分

黑色圈为非常重要的部分,包括:数据偏移、保留位和六个控制位

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值