网络基础 TCP协议(报文解析)
来源:互联网 发布:数控切割机套料软件 编辑:程序博客网 时间:2024/05/21 06:57
网络基础 TCP协议(报文解析)
(一) TCP/ UDP区别
TCP:传输控制协议
TCP:传输控制协议
TCP与UDP都是属于传输层协议,尽管使用同样的网络层IP协议,但是两者之间有很大的区别。TCP是一种面向连接的协议,提供的是一种面向连接的、提供可靠地字节流服务。
TCP在正式收发数据前,必须要和对方建立可靠的连接(必须要经过三次“握手”才能建立起连接)。由于TCP是面向连接的协议,也就意味着TCP应用不能应用与多播和组播。
UDP则是面向非连接的协议,它不能与对方建立连接,而是直接把数据包发送过去,UDP适用于一次性传送少量的数据,对可靠性要求不高的应用环境。正因为UDP协议没有连接过程,所以通信速度快。所以在业务中,选择TCP还是UDP作为传输协议,完全取决于具体的业务需求。
(二) TCP可靠性的策略
1. 数据被分割为TCP认为合适的块进行传输
1. 数据被分割为TCP认为合适的块进行传输
2.当TCP发送一个数据报之后,将启动一个定时器,等待目标确认这个数据报,如果不能得到确认,将重发这个数据报。TCP提供了一系列的超时和重发策略。
3. TCP将保持伪首部、首部与数据的校验和(具体参考checksum算法),这是一个端到端的校验和。如果校验和出错,则接受端会丢弃这个数据,并不回送确认报文(发送端将在超时后重发)。
4. TCP采用IP协议作为网络层,IP数据报有可能乱序传送,如有必要,TCP将对IP数据报进行重新排序。
5. IP数据报可能会发送重复,TCP端能够丢弃重复的数据。
6. TCP收到一个数据报时,并不立即发送确认报文,通常将推迟几十毫秒再发送。
7. TCP提供了流量控制的策略
6. TCP收到一个数据报时,并不立即发送确认报文,通常将推迟几十毫秒再发送。
7. TCP提供了流量控制的策略
(三) TCP的报文格式详解
3.1 TCP报文格式
下图给出了TCP的报文格式(图片来源于网络)。有时一个IP地址和一个端口号也被称之为套接字(socket)。套接字对(socket pair)可以唯一的确定互联网中的双方连接关系。
- 32位序号:指出段中数据在发送端数据流中的位置。用来标志从TCP发送端向TCP接收端发送的字节流,表示这个报文的第一个数据字节,如果把TCP看做是两个应用程序间的数据单项流动,则TCP用需要对每个字节进行计数,溢出后从0开始。
- 32位确认序号:用于接收端通知发送端希望得到的下一个字节数,在此之前的字节已经接收完毕。确认需要在ACK标志位1时,有效。TCP提供全双工服务,数据在两个方向上独立传输,所以连接的每一端要保持每个方向上的传输序号。
- 首部长度:指出以32bit为单位的字长度。 它是针对变长“选项”设计的。4位首部长度,最大值为15个字,即首部最大长度为64个字节。
- URG:紧急指针字段可用
- ACK:确认字段可用
- PSH:本报文段请求紧急操作
- RST:连接复位(首先断开连接,然后重新连接)
- SYN:序号同步,用于建立连接中的同步(该标志仅仅在三次握手建立TCP时有效)
- FIN:发送方字节流结束(该标志仅在结束TCP连接时有效。0表示结束连接请求、 1表示结束连接)
- 窗口(滑动窗口):用于通知接收端接收缓冲区的大小,提供流量控制。
3.2 URG与PSH介绍
如果发送方希望终止操作,不想接收方接收完所有的数据(如远程主机上的程序错误时就需要这种信号)。TCP此时将数据指定为“紧急”型,接收方收到这种数据后,会不必排队而尽快通知应用程序。URG为1,则表示它是紧急的,其中“紧急指针”指出了紧急数据在报文段中的结束位置。
PSH位提供了数据强迫传输机制,以强迫传输当前流中的收时,不必等待缓冲区满,直接通知应用层完成数据交付,因为一般来说TCP需要等内核缓冲区填满后再通知应用层。而URG是不需要经过缓冲区的。
3.3 滑动窗口
所谓的滑动窗口,表示接受端的实际接收能力,用以限制发送方的发送速度。窗口起始位置为确认号字段指明的值,这个值是接收端根据自身实际缓冲希望接收的字节数。窗口大小最大为65535个字节(16bit)。
TCP可以表述为没有选择确认或否认的滑动窗口协议。TCP缺少选择确认,因为TCP首部的确认序号表示接收方已成功收到的字节后,希望得到的连续的下一个字节。例如:1~1024字节已经收到,下一段报文中包含从2049~3072到的字节,接收端并不能确认这个新的报文,只是发回一个确认序号为1025的ACK。如果接受到1025~2048的报文,但是检验和错,TCP也只是发回一个确认序号为1025的ACK。
分析下图所示的滑动窗口刻度,说出起始序号、发送窗口、报文段长度分别为多少?
由图可知,前一个窗口的值是400,发送了1-400长度的报文,之后收到1-200的报文并更新了滑动窗口(确认中,窗口值为500),此时窗口向前滑动200个长度(从1的位置滑到200),且窗口范围扩大100。
起始序号为401,发送窗口长度为500,报文段长度为300(从401到700)。
窗口内可以发送报文的内容为401-700,201-400之前已经发送,在等待被确认或者重传。
(四) UDP的报文格式
UDP报文格式如下:
UDP目的端口:接收数据时,UDP要判断此目的端口是否与当前使用的端口匹配,如是,则将数据报放入相应的接收队列,否则,抛弃该数据并向信源端口发送“端口不可达”的差错消息报文。
报文长度:以字节计算的整个报文长度,最小为8个字节,只有报头
校验位:为了效率,该值是一个可选项
正如博文标题所述,仅仅作为入门的内容。TCP涉及的流量控制、阻塞控制也是非常值得研究的~~
推荐一篇流量控制、阻塞控制的科普文章:
TCP滑动窗口机制 http://blog.csdn.net/whygosofar/article/details/5582965
正如博文标题所述,仅仅作为入门的内容。TCP涉及的流量控制、阻塞控制也是非常值得研究的~~
推荐一篇流量控制、阻塞控制的科普文章:
TCP滑动窗口机制 http://blog.csdn.net/whygosofar/article/details/5582965
0 0
- 网络基础 TCP协议(报文解析)
- 网络基础:TCP协议
- 网络:传输层 TCP报文格式解析
- 五、Linux网络编程-TCP/IP基础(五)滑动窗口协议、UDP特点、UDP报文格式
- 【网络基础】IP数据报文段解析
- TCP/IP网络协议基础TCP/IP网络协议基础
- 网络协议:SNMP协议PDU报文格式解析
- TCP协议---报文格式
- TCP协议-RST报文
- TCP/IP 网络协议基础
- TCP/IP网络协议基础
- TCP/IP网络协议基础
- TCP/IP网络协议基础
- TCP-IP协议族(二) HTTP报文头解析
- TCP-IP协议族(二) HTTP报文头解析
- TCP-IP协议族(二) HTTP报文头解析
- TCP-IP协议族(二) HTTP报文头解析
- TCP/IP协议族(二) HTTP报文头解析
- OCP 1Z0 053 6
- HDU 2546 饭卡 题解(动态规划)
- hibernate4无法保存数据
- javase学习笔记------------数组
- 类模板的练习
- 网络基础 TCP协议(报文解析)
- Android - Fragment BackStack 清空
- 在Visual Studia2013中使用ASP.NET网站配置工具
- C++ Primer 第四版中文完整版 和答案完整版
- javase学习笔记---函数的重载
- Fastjson介绍
- 加密通讯原理
- Jquery学习(effect 简单的特效)
- 关于Hibernate中的Configuration