
文章插图
回顾前面封装的描述,在传输层、网络层、链路层,分别将端口号存入TCP/IP首部,将协议类型存入IP首部,将帧类型存入以太网帧首部 。所以在接收端,将一层层拆掉首部,取出对应信息,然后做分派,丢给不同模块处理,上图就是整个处理过程 。
小结
本文讲了地址、域名、端口、TCP/IP分层模型、封装、分用等概念 。
你最好能记住TCP/IP链路层->网络层->传输层->应用层的四层划分 。
TCP segment、UDP datagram、IP datagram、IP fragment、以太网frame、以及IP层和链路层之间传输的数据单元packet,这些概念你最好分清楚,这样交谈的时候会显得比较专业而不是很土 。
数据封装,多看几遍你便能记住了 。
TCP封装格式:以太网首部(14)+IP首部(20)+TCP首部(20)+应用数据+以太网尾部(4)
UDP封装格式:以太网首部(14)+IP首部(20)+UDP首部(8)+应用数据+以太网尾部(4)
应用层协议在应用层实现,而传输层、网络层、链路层都是在内核实现,所以想修改或者优化底层协议很难,因为你几乎动不了内核,因为网络上的大量设备OS你没法一并改过来,这就是所谓的网络设备僵化问题,HTTP3用UDP替代TCP,就是想在应用层自己去实现可靠传输等 。
每个以太网帧有长度限制(48~1500),网络上每个设备也有对包的长度限制,IP报大了就要分片,分片可能发生在发送端,也有可能发生在中间设备,但应该尽量避免分片,IP报会带有信息让分片后可以重组,MTU的概念可以了解一下 。
ICMP和IGMP逻辑上属于网络层,因为他们是IP协议的附属协议,但实际上,ICMP和IGMP报文都被封装为IP datagram传输,所以又可以把他们视为IP层之上的协议 。
同样ARP和RARP用于IP地址和硬件MAC地址相互转换,逻辑上属于链路层,但实际上arp和rarp报文跟IP datagram一样,都被封装成以太网Frame传输 。
接收端收到以太网帧之后,会走分用流程,最终将原始数据交给应用程序 。
TCP/IP协议的应用程序经常使用socket编程接口 。
有很多跟网络相关的工具,比如ping、ifconfig、netstat、arp、tcpdump、wireshark等 。
问题
一年前,我对网络编程这块,脑子里充满疑问 。
众所周知,TCP建连三次握手和断连四次握手,但如前所述,任何时候,从主机A都可以任意发一个IP报到主机B,网络主机之间是通过IP层实现路由转发的,两点之间的每个IP报都是独立路由的,既然这样,为什么还要建连?还要浪费时间做A->B、B->A、A->B来回?直接把包发过去不就完了吗?
假设通过AB建立的3个IP报的作用是表示AB之间的网络连通性?哪又有什么作用?因为网络是随时变化的,此刻连通又不代表下一刻连通 。建连之后似乎并不存在AB之间的真正连接,只是两端OS层面维护的一个状态(数据对象)?是虚拟连接?
建连到底是什么意思?客户端发送一个IP报到服务器去发起连接?那跟传输数据的普通IP报又有什么区别?
双工是什么意思?为什么socket关闭一半传输之后就不能发送数据了?网络上IP报不是可以任意传输吗?这个限制是哪个地方添加的?
拥塞控制是什么?Nagle是什么?滑动窗口是什么?TCP为什么要保活?
socekt的编程接口和各种概念跟TCP/IP原理有怎样的对应关系?学完TCP/IP原理对理解socket编程有什么帮助?
没有深究TCP/IP原理之前,我其实是有很多问题的,只是做应用程序开发,好像没搞懂那些问题也还可以凑合干,但终究是有点糊里糊涂,感觉不太爽 。
推荐阅读
- freebuds3怎么调音量
- 如何设置电脑开机密码,可以怎么设置电脑开机密码
- png怎么转换成jpg,可以怎么将PNG转换成JPG
- 该怎样删除微博的评论,微博的评论怎么删除别人的评论
- 如何给电脑加密,电脑可以如何进行设置密码
- 三分钟带你了解steam的发展史
- 手机电池容量怎么看,手机怎么查看电池容量
- 苹果手机中要怎样静音,苹果手机怎么调静音模式
- 电脑锁屏密码怎么设置,电脑要怎样才可以设置密码
