tcp/ip协议做了啥

你离开我真会死。 提交于 2020-02-26 08:37:40

# 基础知识:

 

- tcp/ip协议不是一个协议,是一个协议群,tcp/ip协议对应的四层模型,应用层、传输层、网络层、链路层。

 

## 各层到底做了啥?

 

- 链路层:

 

主要是将数据封装成数据帧,数据帧头部信息有源mac地址,目标mac地址,然后以广播形式通过物理介质(光纤、双绞线..)发送给目标主机。  

为什么有ip地址还需要mac地址?  

ip地址是分配的,可变动的,mac地址是每块网卡的身份标识,主机接入互联网必须使用网卡,网卡地址是一个机器全球唯一标识,所以通过mac地址找目标主机更可靠。

有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。

 

- 网络层:

 

发送者如何知道接收者的MAC地址?(arp协议)  

发送者如何知道接收者和自己同属一个子网?(ip协议)  

如果接收者和自己不在同一个子网,数据包如何发给对方(路由协议)  

 

网络层有ip协议、arp协议、路由协议,主要是解决如上三个问题。  

我认为该层主要是为了获取目标的mac地址。  

ARP获取mac地址,ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,在数据包传输时要通过ip协议判断目标ip和源ip是否处于同一子网,如果不在,则通过路由协议将数据包转发给本子网的网关进行路由,最终由以太网广播给目标ip子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址。

 

- 传输层:

 

链路层主通过MAC地址明确主机的身份, 网络层通过IP地址明确了目标主机网段,有了这两个地址,数据包就从可以从一个主机发送到另一台主机。  

但实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。而每台电脑都有可能同时运行着很多个应用程序,所以当数据包被发送到主机上以后,是无法确定哪个应用程序要接收这个包。  

所以传输层传输层的主要工作是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性。  

 

传输层有udp、tcp协议,udp协议是面向无连接,tcp是建立在udp的基础上建立三次握手,确认连接可靠性。  

 

主机A:我想发数据给你,可以么?

主机B:可以,你什么时候发?

主机A:我马上发,你接着!

 

- 应用层:

 

应用层常见的有http、ftp、smtp协议等,该层主要工作是定义数据格式并按照对应的格式解读数据。  

例http协议,在头信息定义了content-type是json还是from表单提交。

 

 

## 总结:

 

当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。

 

转自:https://my.oschina.net/u/3745555/blog/3070180

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!