UDP首部代码:
struct udp_hdr { unsigned short src_port; unsigned short dest_port; unsigned short len; unsigned short chksum; };
协议描述
源端口号和目的端口号:源和目的主机的IP地址加上端口号构成一个TCP连接
序号和确认号:序号为该TCP数据包的第一个数据字在所发送的数据流中的偏移量;确认号为希望接收的下一个数据字的序号;
首部长度,以4个字节为单位,通常为20个字节
6个标志位:
URG:如果使用了紧急指针,URG置1,紧急指针为当前序号到紧急数据位置的偏移量
ACK:为1表示确认号有效,为0表示该TCP数据包不包含确认信息
PSH:表示是带有PUSH标志的数据,接收到数据后不必等缓冲区满再发送
RST:用于连接复位,也可用于拒绝非法的数据或拒绝连接请求
SYN:用于建立连接,连接请求时SYN=1,ACK=0;响应连接请求时SYN=1,ACK=1
FIN:用于释放连接,表示发送方已经没有供发送的数据
窗口大小:表示在确认字节后还可以发送字节数,用于流量控制
校验和:覆盖了整个数据包,包括对数据包的首部和数据
选项:常见的选项是MSS(Maximum Segment Size)
连接建立三次握手
连接终止四次握手
TCP如何保证可靠性
q 应用数据被分割成TCP认为最适合发送的数据块,称为段传递给IP层。
q 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
q 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
q TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段并且不确 认(导致对方超时重传)
q TCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行重新排序。
q IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
q TCP还能提供流量控制。TCP连接的每一方都有一定大小的缓冲空间。
q 步骤a:应用程序ping会判断发送的是主机名还是IP地址,调用函数gethostbyname()解析主机机B,将主机名转换成一个32位的IP地址。这个过程叫做DNS域名解析.
q 步骤b:ping程序向目的IP地址发送一个ICMP的ECHO包
q 步骤c:将目标主机的IP地址转换为48位硬件地址,在局域网内发送ARP请求广播,查找主机B的硬件地址。
q 步骤d:主机B的ARP协议层接收到主机A的ARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A。
q 步骤e:发送ICMP数据包到主机B
q 步骤f:主机B接收到主机A的ICMP包,发送响应包。
q 步骤g:主机A接收到主机B的ICMP包响应包。
主要协议及其关系
TCP/IP协议栈
Socket编程实践(17) --TCP/IP各层报文(2)
原文地址:http://blog.csdn.net/zjf280441589/article/details/41864755