TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。
- TCP(Transimision Control Protocal)
- 传输控制协议
- 可靠的、面向连接的协议
- 传输效率低S
- UDP(User Datagram Protocal)
- 用户数据报协议
- 不可靠的、无连接的服务
- 传输效率高
网络模型
OSI | 功能 | TCP/IP |
---|---|---|
7应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,S7, Modbus, FTP, SMTP,DNS,Telnet 等等 |
6表示层 | 数据格式化,代码转换,数据加密 | 没有协议 |
5会话层 | 解除或建立与别的接点的联系 | 没有协议 |
4传输层 | 提供端对端的接口 | TCP,UDP |
3网络层 | 为数据包选择路由 | IP,ICMP,OSPF,EIGRP,IGMP |
2数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,MTU |
1物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
- 针对OSI网络参考模型,通常我们TCP/IP就直接可以理解成
TCP/IP | 说明 |
---|---|
应用层 | 例如什么S7通讯协议啊,FTP协议,Modbus通讯等等均是应用层的一种协议,其实还是基于TCP传输层 |
TCP层也称传输层 | 发包 |
网络层(IP) | 网络互通嘛,没什么好解释的 |
网络接口层 | 例如什么以太网啊,RS232/485的一些串口啊 |
以上是一些基础的协议,下面找一个TCP的报头的图片
解释:源端口号和目标端口号各占16个位
顺序号有的叫序列号:占32位
确认号:
占32位
头部长度6位,保留6位
URG:报文段紧急。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文段交给应用层。
RST:重建连接。
SYN:发起一个连接。在握手完成后SYN为1,表示TCP建立已连接。此后的所有报文段中,- SYN都被置0。
FIN:释放一个连接。如果源主机数据发送完毕,将把该连接下要发送的最后一个报文段的报- 头中的FIN位置1,或将该报文段后面发送的报头中该位置1。
窗口6位
校验和16位,紧急指针16位
可选项8的倍数 位
数据由此不难看出TCP至少是20个字节
那么具体是怎么三次握手的呢,先找一张图片,自己就不画了,网上一搜一大堆
- 解释
- 客户端向服务端发起请求SYN,和顺序号seq状态改为SYN_SEND
- 服务端收到后,确认收到ACK信号即客户端序列号+1,发送SYN请求,服务端顺序号发给服务端,同时状态更改为SYN_RECV
- 客户端收到后返回服务端确认信号即ACK即服务端序列号+1,另外将置后的顺序号发给服务端,状态进入Established
四次挥手
就是将服务端给哭护短发送请求时拆分为了两次,大家可以网上找更详细的图片解析
客户端向服务端发送 FIN (完成信号)信号+ ACK(确认信号) 报文,序号为 X。 客户端进入 FIN-WAIT1第一次等待
服务器端回复 ACK 报文。附带序号Z和确认序号X+1,表示服务器已经接受到了客服端的报文。但是由于服务器可能还在处理事务,因此,报文并不会携带FIN标志。状态:CLOSE WAIT(服务端处理事件等待)
在一段时间之后,服务器已经处理完毕,发送带有 FIN和ACK的报文,序号为Y,图中未标出确认序号为 X + 1 。 状态: ACK-LAST
客户端发送ACK报文,序号为 X+1,确认号Y+1 。 客户端进入: TIME_WAIT。服务端进图CLOSE(初始状态)
提一嘴S7通讯,可以自己抓包,很清晰的看到三四握手发的包内容以及S7的协议结构
至于与PLC的通讯其实都更改应用层的协议,传输过程都时一层报文一层报文的累加最后成了一个固定的协议,例如西门子S7协议,是按照OSI模型的形式拼接的报文
S7+CTP+YPKT+TCP/IP(具体可以去抓包,可以一目了然)
[太晚了...先这样,明天早起上班,回头再补充]