一个数据包发送的旅程
来源:互联网 发布:淘宝网下载到桌面 编辑:程序博客网 时间:2024/06/05 18:24
应用层:首先结合应用层的协议,我们把这些数据放到一个缓冲区内,然后形成了应用层的报文data。
传输层 :数据通过传输层发送,比如TCP。在这里报文打上了传输头的包头(TCP/UDP),主要包含端口号。这样就组成了tcp的数据传送单位segment。tcp是一种端到端的协议,利用这些信息,比如tcp首部中的确认序号(根据这个确保数据顺序接收,IP也有不过那叫分片),根据这些数字,发送的一方不断的进行数据发送和等待确认,发送一个数据段后,会开启一个计数器,只有当收到确认后才会发送下一个,如果超过计数时间仍未收到确认则进行重发,在接受端如果收到错误数据,则将其丢弃,这将导致发送端超时重发。通过tcp协议,控制了数据包的发送序列的产生,不断的调整发送序列,实现流控和数据完整。
网络层:然后将待发送的数据段送到网络层,在网络层被打包,封装上了网络层的包头(IP),包头内部含有源及目的的ip地址,该层数据发送单位被称为packet。网络层开始负责将数据包在网络上传输,如何穿过路由器,最终到达目的地址。在这里,根据目的ip地址,查找下一跳路由的地址。
(1)根据目的地址,得到目的网络号,如果处在同一个内网,则可以直接发送。
(2)如果不是,则查询路由表,找到一个路由。
(3)如果找不到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
(4)数据包中包含一个最大路由跳数(TTL),如果超过这个跳数,就会丢弃数据包,这样可以防止无限传递。
如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或 “网络不可达”的ICMP错误。
- 一个数据包发送的旅程
- NS 发送一个 cbr 数据包的过程
- 一个地址的旅程
- 一个地址的旅程
- 一个关于Map的旅程
- 一份发送数据包的源代码
- 发送超过1500的数据包
- virtio-netdev 数据包的发送
- ip数据包的发送流程
- WinPcap编程0x0300 发送一个数据包
- 发送数据包:
- 发送数据包
- 我要开始一个新的旅程
- 一个Java程序从生到死的旅程
- 真正开始一个程序员的旅程
- 一个http的旅程v1.0
- 网络编程——设计一个发送TCP数据包的程序
- 怎么把一个结构体的数据包通过串口发送出去?
- [Network]网络协议结构体及文件
- python的小知识(持续记录)
- javaSE之字符编码方式
- 数据库的连接池的原理与Hibernate的内置连接池及C3P0的配置
- ARM汇编指令集3 --汇编伪指令
- 一个数据包发送的旅程
- java面试题(下)
- spring boot学习一:intellij环境搭建
- Linux常用命令以及常遇问题总结
- python3教程
- 【十】Java多线程
- iOS:自定义图片/视频/音频采集播放,相册,图片编辑
- SSH面试题
- 系统32位指针变量为4字节系统16位指针变量2个字节