1、网络包的组成:
报头/起始帧分界符——MAC头部——IP头部——TCP头部——数据——FCS(帧校验序列)
2、TCP头部由TCP模块负责添加,头部格式如下:(最小20字节)
发送方端口号
接收方端口号
序号(发送数据的顺序编号):发送方告诉接收方该网络包发送的数据相当于所有发送数据的第几个字节。
ACK号(接收数据的顺序编号)
数据偏移量
保留
控制位:
URG:表示紧急指针字段有效
ACK:表示接收数据序号字段有效
PSH:表示通过flush操作发送的数据
RST:强制断开连接,用于异常中断的情况
SYN:发送方和接受方相互确认序号,表示连接操作
FIN:表示断开连接
窗口:接收方告知发送方窗口的大小(即无需等待确认认可一起发送的数据量)
校验和
紧急指针
可选字段
3、IP头部和MAC头部由IP模块负责添加。
IP头部:IP用的头部,包含IP头部
MAC头部:以太网的头部,包含MAC地址
IP头部格式如下:
版本号
头部长度
服务类型
总长度:表示IP消息的总长度
ID号:用于识别包的编号,一般为包的序列号。如果一个包被IP分片,则所有的分片都拥有相同的ID
标志:该字段有3个比特,有效的是前两个比特。分别表示是否允许分片,当前包是否是分片包
分片偏移量
生存时间
协议号:十六进制表示,TCP:06 UDP:11 ICMP:01
头部校验和
发送方IP地址
接收方IP地址
可选字段
MAC头部的格式如下:
接收方MAC地址(48比特,5字节)
发送方MAC地址
以太类型:使用的协议类型0000-05DC:IEEE802.3 0800:IP协议 0806:ARP协议 86DD:IPV6
4、数据包分片、重组操作:
(1)发送方:
将数据包分为多个TCP头部+数据包的组合,TCP头部中存着不同的数据序号;之后将多个组合交由IP模块,统一添加IP头部和MAC头部,IP头部的ID号设为统一的。
(2)接收方:
IP模块具有分片重组的功能,如果接收到的包是进过分片的,那么IP模块会将它们还原成原始的包。分片的包会在IP头部的标志字段中进行标记,当收到分片的包时,IP模块会将其暂时存在内部的内存空间中,然后等待IP头部中具有相同ID的包全部到达,因为同一个包的所有分片都具有相同的ID。此外,IP头部还有一个分片偏移量的字段,它表示当前分片在整个包中所处的位置。根据这些信息,在所有的分片全部收到之后,就可以将它们还原成原始的包。
5、滑动窗口机制:
所谓滑动窗口,就是在发送一个包之后,不等待ACK号的返回,直接发送后续的一系列包。有效利用等待ACK号的这段时间。
窗口大小:能够接收的最大数据量。
注意接收缓冲区的概念、TCP头部中的滑动窗口字段的使用(三次握手时传递互相的窗口大小,并且中途还会更新大小)
6、IP头部的两个IP地址分别为:发送方网卡的IP地址;应用程序提供的接收方IP地址。
MAC头部的发送方和接受方的MAC地址分别是发送方网卡的MAC地址;利用ARP(地址解析协议)协议,根据接收方IP地址广播得到的接收方MAC地址。
注意:ARP缓存概念。
7、ICMP协议:
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。
8、UDP传输协议:
UDP协议使用的具体案例:
向DNS服务器查询IP地址的时候就是使用的UDP协议。
发送音频和视频数据。
像DNS查询等交换控制信息的操作基本上都可以在一个包的大小范围内解决,这种场景下就可以使用UDP协议传输。UDP协议没有TCP的接收确认、窗口机制。在收发数据前不需要交换控制信息,也就是说不需要建立和断开连接。
UDP头部的格式如下:(8字节)
发送方端口号
接收方端口号
数据长度:UDP头部后面数据的长度
校验和:用于校验错误
发送数据:
从应用程序获取的数据前面加上UDP头部,然后交给IP进行发送就OK了。
接收数据:
根据IP头部中的接收方和发送方IP地址,以及UDP头部中的接收方和发送方的端口号,找到对应的套接字并将数据交给相应的应用程序就OK了。
9、TCP与UDP的区别: (转载)
1、基于连接与无连接;
2、对系统资源的要求(TCP较多,UDP少);
3、UDP程序结构较简单;
4、流模式与数据报模式 ;
5、TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
10、TCP与UDP的区别:
(1)回答发送数据前是否存在建立连接的过程。
(2)TCP过确认机制,丢包可以重发,保证数据的正确性;UDP不保证正确性,只是单纯的负责发送数据包。
(3) UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因 此,应用程序需要选择合适的报文大小。
(4)UDP的头部,只有8个字节,相对于TCP头部的20个字节信息包的额外开销很小。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。