TCP数据走向理解

å¨è¿éæå¥å¾çæè¿°

ISO网络七层:
应用层:HTTP/HTTPS/SSH/FTP/TELNET等,泛指具有网络通讯的应用程序,而这些应用层的协议只是被应用程序应用而已。

会话层/表示层没什么好讲的,都是程序员调用的,就是对报文进行编码。

传输层:TCP/UDP,基础不讲,作用通俗的讲就是不管怎么传输,数据肯定可以点对点的传输,而传输层的协议就是对这个传输的过程进行控制。

网络层:IP/ICMP/IGMP/ARP/RARP,这一层的作用是告诉计算机在网络中传送报文的路径等等。

数据链路层:就是MAC,全球唯一的物理地址,网卡出场时写在里面的,而网络中报文的传输就是靠识别MAC地址来进行传输的。

物理层:010101010101的信号在通信介质中传输。

通信:
其实用浏览器浏览网页,用ssh/ftp等连接远处主机,用播放器听歌看电影,玩游戏,他们的数据传输过程都是一样的,不同的就是应用层的协议,传出层的协议不同而已,下面以用户用浏览器浏览网页的过程作为例子。

浏览器访问网页的过程:
    用户每打开一个页面,就是一个新的进程,网络通讯其实就是不同主机之间进程的通信,端口用来标识进程,区分进程。用户在浏览器输入网址,浏览器对域名进行域名解析,此处域名解析步骤不在阐述,就是将域名解析成对应的公网IP地址,浏览器默认的端口为80端口,https协议的是443端口,浏览器将访问的信息按照HTTP协议封装为HTTP请求报文,作为要发送的应用层数据块。在知道了要访问的IP+80端口后浏览器(进程中的程序)将目标IP,目标端口,要发送的数据块发送到传输层,传输层为当前的浏览器进程分配绑定一个TCP端口(这个端口的作用就是标识进程,区分主机上的进程,又叫做应用程序地址),接下来就是大家熟悉的TCP三次握手,两次握手后,第三次可以添加数据块发送了,步骤是在传输层为数据块添加源端口、目的端口,此时数据块+目的/源端口叫做数据块(TCP)/消息(UDP),然后向下发送到网络层,在网络层为消息添加目的/源IP地址(此处目的IP由传输层提供,而目的IP/端口都是用户提供的),此处数据块+目的/源端口+目的/源端口的报文叫做数据包,数据包发送到数据链路层,数据链路层添加目的/源MAC地址。在网络层时源IP和目的IP会与子网掩码做与运算来确定目的IP是否和源IP在同一网段,当在同一网段时目标MAC直接添加表里IP对用的MAC,此处假设不在同一网段,目标MAC填网关MAC形成数据帧,最后通过物理层电信号将数据帧发送至网关,网关接收到数据帧后对其解析,将源地址换成路由设备的IP,源端口换成没有被占用的端口,同时在转换表中添加替换前后IP+端口的对应关系。路由设备数据帧通过目标MAC发送至主机,然后数据帧在每一层去掉用于传送的附加信息,最后HTTP请求协议/源IP/源端口发送至web应用程序,web应用程序进程接收到请求后解析HTTP请求报文,根据请求的信息寻找对应的文件,如果是PHP等文件则读取文件并调用PHP解析器解析执行,将输出结果打包成HTTP响应报文作为应用层数据,目标IP与端口(接受的源IP与端口)发送至传输层,从上至下封装后发送到路由设备,路由设备查表将目的IP/端口换成内网中的对应的IP/端口。网络层根据目内网的目的IP查表得到对应的MAC,然后发送至用户的主机,同样一层一层的去掉对应的头部,到传输层时,根据目的端口来决定要发送数据块到哪个进程。发送到浏览器窗口后浏览器解析HTTP响应报文,将.html文件解析成页面,完成了网页的访问。

    同理,SSH连接,FTP,TELNET等利用应用层协议通讯的进程都是如上步骤,只是应用层对应用层协议报文的利用与响应方式不同而已。

补充:
     对于端口与进程的关系,我觉得不是单纯的进程ID在通信过程周期绑定1023以上的随机端口号,我的理解是:进程是一个应用程序代码在系统分配的内存中执行的过程,具有独立的内存单元。线程是动态分享进程的内存进行一段代码的执行过程(进程和线程都有自己私有的内存)。而端口绑定的是想实现临时通信的代码块,这个代码块可以是进程,也可以是一个进程中的多个线程(网络进程),代码块绑定端口并发送消息,当主机在接收响应消息并 发送到传输层后,根据端口将响应消息发送至相应端口绑定的代码块的对应的内存中,代码块继续执行,对接受的数据Do Something!!!

注意:通信过程中,不管是客户端的TCP/UDP端口,还是各各路由器的端口,在使用/bind期间,其他应用不能占用和监听,这些过程都在系统底层被封装好的,所以是绝对安全的。

总结:
    1. 网络中的通信就是不通主机的进程之间的通信。

    2. TCP/UDP端口的作用就是区分主机上的进程,在进程存在并访问外网时,就会被分配端口以标记进程,四次挥手结束后端口被回收,端口叫应用程序地址,是临时资源。进程被分配端口后进程发送的数据都会通过端口,接收数据也会通过对应端口。

    3. ISO中发送数据从上到下,接收数据从下到上。其实可以理解为ISO对应层之间的通讯。

    4.下一篇博客讲一下代理的详细过程,和路由设备的NAT中PAT多路端口复用其实差不多。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值