实验楼_TCP/IP网络协议基础_Note05_S6
来源:互联网 发布:广智软件安装 编辑:程序博客网 时间:2024/05/02 01:35
S6 传输层:TCP协议
一、TCP特点
1. 面向连接
2. 可靠传输:无差错、不丢失、不重复、按顺序
3. 点对点:TCP连接的两端都设有发送缓存和接收缓存
4. 全双工
二、TCP报文段结构
TCP报文段的报头有前20字节的固定部分,后面4n字节是根据需要而添加的字段。
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. 四次挥手
四、其他
超时重传与ARQ协议
流量控制和拥塞控制
S6 尝试抓取一个TCP数据报,并解读其内容
STEP 01
需要下载从github下载代码,是基于TCP的聊天小程序,分为Server(服务端)和Client(客户端):
cd Desktopgit clone https://github.com/shiyanlou/tcp_ip_6sudo apt-get updatesudo apt-get install tcpdumpsudo tcpdump -vvv -X -i lo tcp port 7777
STEP 02
编译完成后先不要运行,先打开tcpdump,使用命令安装并运行tcpdump:
sudo apt-get updatesudo apt-get install tcpdumpsudo 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
先来看下数据报文的结构:
黄色为TCP报文头部;
紫色为TCP报文段的数据部分;
·为非常重要的部分,包括:数据偏移、保留位和六个控制位。
--> 0x0020 后面第一个四位数据,例如 a002, 转换成 2 进制为 1010 0000 0000 0010,包括数据偏移4位:1010, 6位保留位:000000,6位控制位:000010(分别对应URG ACK PSH RST SYN FIN)。
STEP 06
现在,使用Client和Server聊天,轮流互发几条简短的消息(比如 hello、hi之类的)便可以关闭Client和Server,回到运行tcpdump的终端查看抓取的报文段内容:
1. Client(端口号 60556)与Server(端口号 7777)建立连接
观察一下建立连接的【三次握手】:
结合上文 三次握手 的示意图,大概可以理解为:
①Client向Server发消息:不如交个朋友(SYN = 1);
②Server向Client发消息:收到你的信息(ACK = 1),同意交个朋友(SYN = 1);
③Client向Server发消息:收到你的信息(ACK = 1)。
成功做朋友。
2. 相互发送消息
Server向Client say hi:
Client向Server say hello:
3. 断开连接
观察一下断开连接的【四次挥手】:
结合上文 三次握手 的示意图,大概可以理解为:
①Client向Server发消息:觉得我们不合适,不如结束(FIN = 1);
②Server向Client发消息:收到你的信息(ACK = 1);
③Server向Client发消息:收到你的信息(ACK = 1),那我们分手吧(FIN = 1);
④Client向Server发消息:收到你的信息(ACK = 1)。
- 实验楼_TCP/IP网络协议基础_Note05_S6
- 实验楼_TCP/IP网络协议基础_Note05_S6
- 实验楼_TCP/IP网络协议基础_Note01_S1S2
- 实验楼_TCP/IP网络协议基础_Note02_S3S4
- 实验楼_TCP/IP网络协议基础_Note03_S7S8
- 实验楼_TCP/IP网络协议基础_Note04_S5
- 小白学网络之一_TCP/IP协议
- 小白学网络之二_TCP/IP协议之链路层协议
- 网络编程_TCP协议
- 网络编程学习_TCP协议
- Linux笔记_网络_TCP/IP
- 网络编程_TCP协议的文件上传
- 网络编程_TCP协议发送数据
- 网络编程_TCP协议接收数据
- 网络编程_TCP协议上传文本文件
- 黑马程序员_Java基础_网络编程_TCP协议编程,客户端服务端程序
- TCP/IP网络协议基础TCP/IP网络协议基础
- TCP/IP 网络协议基础
- 过桥问题的通解
- 描述内存分配方式以及它们的区别?
- ubuntu14.04版本MeshLab软件的安装与使用方法
- 最大公共子串问题的Python解法
- TCP的三次握手和四次挥手
- 实验楼_TCP/IP网络协议基础_Note05_S6
- CSS中可以和不可以继承的属性
- 51Nod 1135 求一个奇质数的最小原根
- 认认真真写博客,踏踏实实编代码
- 深入理解Apache Flink核心技术
- HDU-1557 权利指数(dfs)
- 报数
- [WPF] UserControl vs CustomControl
- java 集合框架和泛型