码迷,mamicode.com
首页 > 其他好文 > 详细

Socket编程实践(17) --TCP/IP各层报文(2)

时间:2014-12-11 14:07:14      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:socket   tcp   linux   服务器   

UDP数据报

bubuko.com,布布扣

UDP首部代码:

struct udp_hdr
{
    unsigned short src_port;
    unsigned short dest_port;
    unsigned short len;
    unsigned short chksum;
};


 

TCP报文段

 bubuko.com,布布扣

协议描述

    源端口号和目的端口号:源和目的主机的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)

 

连接建立三次握手

 bubuko.com,布布扣

连接终止四次握手

 bubuko.com,布布扣


TCP如何保证可靠性

    q 应用数据被分割成TCP认为最适合发送的数据块,称为段传递给IP层。

    q 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

    q 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。

    q TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段并且不确 认(导致对方超时重传)

    q TCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行重新排序。

    q IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。

    q TCP还能提供流量控制。TCP连接的每一方都有一定大小的缓冲空间。

 

综合案例:数据在网络中传输过程

 bubuko.com,布布扣

    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包响应包。

 

 

其他补充:

主要协议及其关系

 bubuko.com,布布扣

TCP/IP协议栈

bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣

Socket编程实践(17) --TCP/IP各层报文(2)

标签:socket   tcp   linux   服务器   

原文地址:http://blog.csdn.net/zjf280441589/article/details/41864755

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!