数据的封装

当应用程序用TCP传送数据时,数据被传送入协议栈中,然后逐一通过每一层直到被当作一串比特流送入网络

注: UDP数据TCP数据基本一致. 唯一不同的是UDP传给IP的信息单元称作UDP数据报


其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)

注: 4个字节的32bit值的传输次序:首先是0-7字节,其次是8-15, 然后是16-23, 最后是24-31 bit,这种传输次序称作 big-ending(大端)字节序,或者网络字节序

UDP 封装

-

  • 端口号表示发送进程和接受进程
  • UDP长度字段指的是UDP首部和UDP数据的字节长度, 最小为8(发送一份0字节的UDP数据报)
  • UDP检验和覆盖UDP首部和UDP数据

TCP 封装

-

  • 每个TCP段都有包含源端和目的端的端口号,用于寻找发端和收端应用进程,这两个端加上IP首部的源端IP地址和目的端IP地址唯一确定一个TCP连接。
  • 序号用于标识从TCP发端向TCP收端发送的数据字节流,表示在这个报文段中的第一个数据字节。 如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个序号进行计数。
  • 确认序号包含发送确认的一端所期望收到的下一个序号,确认序号应当是上次成功收到的数据字节序号加一,只有ACK标志为1时,确认字段序列才有效。
  • 首部长度给出首部中32-bit字的数目。这个值存在是由于选项字段的长度是可变的,这个字段占4bit,所以TCP最多有60字节的首部,没有选项字段,正常长度是20字节。
  • 6 个标志位
    • URG ,紧急指针(urgent pointer)有效
    • ACK ,确认序号有效
    • PSH ,接收方法应该尽快将这个报文段交给应用层
    • RST ,重新连接
    • SYN ,同步序号用来发起一个连接
    • FIN , 发端完成任务
  • 窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节,窗口大小为16 bit字段,因而窗口大小为65535个字节。
  • 检验和覆盖了整个TCP报文段:TCP首部和TCP数据。
  • URG标志置1时紧急指针才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号,TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
  • 最常见的可选字段是最长报文大小,又为 MSS(Maximum Segment Size)。
  • TCP 报文段数据部分是可选的

IP 封装

-

  • 协议版本号,IPv4 IPv6
  • 首部长度指的是首部占32-bit字的数目,包括任何选项,最长60字节。
  • 服务类型字段包括一个3-bit的优先权子字段(现已被忽略),4 bit的TOS子字段和1 bit未用但必须置0,4 bit 的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小费用,如果所有bit置0,就为一般服务。
应用程序 最小时延 最大吞吐量 最高可靠性 最小费用 0x
Telnet/Rlogin 1 0 0 0 0x10
FTP (控制,数据,任意数据块) 1 0 0 0 1 1 0 0 0 0 0 0 0x10 0x08 0x08
TFTP 1 0 0 0 0x10
SMTP (命令阶段, 数据阶段) 1 0 0 1 0 0 0 0 0x10 0x08
DNS (UDP查询,TCP查询,区域传输) 1 0 0 0 0 1 0 0 0 0 0 0 0x10 0x00 0x08
  • 总长度字段是整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段就可以知道IP数据报中数据内容的起始位置和长度。总长度也是IP首部中必要的内容,以为一些数据链路需要填充数据以达到最小长度。
  • 标识符字段唯一的标识主机发送的每一份数据,通常发一份报文它的值就加1。
  • TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数,指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或者64),一旦经过一个处理它的路由器就减1。当该字段为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
  • 首部检验和字段是根据IP首部计算的检验和码,不对首部后面的数据进行计算。ICMP、IGMP、UDP、和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。
  • 每一份IP数据报都含有源IP地址和目的IP地址
  • 选项

    选项字段都是以 32-bit作为界限,在必要的时候需要对其进行0填充,保证IP首部始终是32-bit的整数倍(首部长度字段所要求)

    • 安全和处理限制
    • 记录路径
    • 时间戳
    • 宽松的源站选路
    • 严格的源站选路

检验和算法

  • TCP UDP 为了验证还有增加了两个伪首部
  • 计算检验和(发送方)
    • 首先把检验和字段置0
    • 对检验字段(IP只有首部,TCP/UDP等为首部和数据)中每个16-bit进行二进制反码求和
    • 结果存于检验和字段
  • 计算检验和(接受方)
    • 由于接受方在计算过程中包含了发送方存在首部的检验和,因此,如果在传输过程中没有发送任何差错,那么接受方计算的结果应该为全1
  • C 的简单实现

    unsigned short check_sum(unsigned short *addr,int len)
    {
    unsigned long sum; for (sum=0; len > 0; len--)
    sum += *addr++; sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16); return ~sum;
    }

TCP/IP UDP 协议首部及数据进入协议栈封装的过程的更多相关文章

  1. TCP/IP/UDP 协议

    互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作 ...

  2. TCP和UDP 协议发送数据包的大小

    在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况作分 ...

  3. TCP与UDP协议

    传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)是典型的传输层协议. 传输层协议基于网络层 ...

  4. TCP和UDP协议的比较

    通信协议 网络通信是两台计算机上的两个进程之间的通信. 网络通信需要通信协议.网络协议有很多种,就像我们平常交流说话,也有多种语言.. 最常见的协议是TCP/IP协议.UDP协议. TCP:TCP 是 ...

  5. 运输层协议--TCP及UDP协议

    TCP及UDP协议 按照网络的五层分级结构来看,TCP及UDP位于运输层,故TCP及UDP是运输层协议.TCP协议--传输控制协议UDP协议--用户数据报协议 多路复用及多路分解 图多路复用及多路分解 ...

  6. TCP/IP网络协议基础

    实验楼学习网络协议传送门 一.TCP/IP简介 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电 ...

  7. 深入浅出TCP与UDP协议

    深入浅出TCP与UDP协议 网络协议是每个前端工程师的必修课,TCP/IP协议族是一系列网络协议的总和,而其中两个具有代表性的传输层协议,分别是TCP与UDP,本文将介绍这两者以及他们之间的区别. 一 ...

  8. 基于TCP与UDP协议的socket通信

    基于TCP与UDP协议的socket通信 C/S架构与初识socket 在开始socket介绍之前,得先知道一个Client端/服务端架构,也就是 C/S 架构,互联网中处处充满了 C/S 架构(Cl ...

  9. Linux--网络基础(概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程)

    网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的.每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机 ...

随机推荐

  1. 关于EditText的android:maxLength属性的注意事项

    一直以为在xml布局文件中对EditText添加 android:maxLength="30";属性是控制EditText字符数的.想当然的以为一个中文占2个字符,一个英文占1个字 ...

  2. codeforce 1073E. Segment Sum

    看到这个就是数位DP了,然而细节极多,对于i=1状态直接判了,还有最后一位直接算了 设f[i][zt][0/1]表示枚举到第i位,用了那些数字,是否有前导0(前导0不计入数字,否则就不知道后面有没有0 ...

  3. 读取Excel文件到DataTable中

    private static string[] GetExcelSheetNames(OleDbConnection conn)        {            DataTable dtbSh ...

  4. InfluxDB 分布式时间序列数据库环境搭建——据qcon大会2016qiniu说集群很坑且闭源了

    InfluxDB 分布式时间序列数据库环境搭建   1. 环境说明 Ubuntu14.04  + influxDB V0.10.1 搭建3个节点的分布式数据库,副本数量2,各节点之间自动进行数据备份并 ...

  5. AngularJS2.0 quick start——其和typescript结合需要额外依赖

    AngularJS2 发布于2016年9月份,它是基于ES6来开发的. 运行条件! 由于目前各种环境(浏览器或 Node)暂不支持ES6的代码,所以需要一些shim和polyfill(IE需要)让ES ...

  6. B1818 [Cqoi2010]内部白点 树状数组

    这个题的想法很好想,就是进行排序之后直接检查每个点的上下左右是否有黑点就行.但是直接枚举显然不行,那怎么办呢?我们就用树状数组维护扫描线,把每排左右点看成一条线覆盖,然后从下往上扫,遇到下加一,遇到上 ...

  7. 洛谷[USACO06JAN]把牛Corral the Cows

    题目描述 约翰打算建一个围栏来圈养他的奶牛.作为最挑剔的兽类,奶牛们要求这个围栏必须是正方 形的,而且围栏里至少要有C< 500)个草场,来供应她们的午餐. 约翰的土地上共有C<=N< ...

  8. [Swift通天遁地]三、手势与图表-(9)制作五彩缤纷的气泡图表

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  9. 微信小程序调用微信支付

    1,首先我们先缕清支付的整个流程,详见https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3,第一 ...

  10. 【洛谷2904/BZOJ1617】[USACO08MAR]跨河River Crossing(动态规划)

    题目:洛谷2904 分析: 裸dp-- dp方程也不难想: \(dp[i]\)表示运\(i\)头牛需要的最短时间,\(sum[i]\)表示一次运\(i\)头牛(往返)所需的时间,则 \[dp[i]=m ...