TCP/IP层次架构

网络能在不同的机器和操作系统之间通信需要依赖一些列的规范的协议,例如:ARP,RARP,TCP,UDP,IP,IGMP,ICMP。这些协议是在不同的层次进行开发和工作,每一层负责完成一定的通信功能,而且层与层之间有相关接口,这样组合成一个完整的网络传输系统


下图是TCP/IP五层网络模型

Linux网络编程-TCP/IP基本框架_第1张图片

结合上图,网际的数据传输需要经过如下步骤:


1 应用程序把数据传输到应用程序的数据发送缓冲区,并设置好下一层的参数,等待发送,FTP(文件传输协议),HTTP(超文本传输协议),SMTP(简单邮件传输协议),SNMP(简单网络管理协议)。
2 数据进入传输层,在这里传输层负责两台主句上端到端的通信,主要依靠TCP和UDP完成。他们把应用层缓冲区的待发送数据接收后,进行数据分组,打包,标识并传输到下一层。TCP还需要负责数据传输成功的确定等可靠性工作。
3 当数据进入网络层的范畴,这里会处理数据分组在网络中的活动,比如:分组,路由。这一层的协议主要有:IP协议(网际协议),ICMP(Internet控制报文协议),IGMP(Internet组管理协议)。数据传输的目的地是根据传输层分组中的数据决定的。
4 数据最终会通过物理层的介质(光纤,电磁波)进行传输。
5 在接收方是相反的过程,数据从最底层一直到应用层还原用户可以识别的信息。


数据传输过程可以用下图简单描述(忽略了链路层和物理层)


Linux网络编程-TCP/IP基本框架_第2张图片

其实用户操作主要是在顶层进行,下面四层的工作由内核完成。

数据的封装与分用

1. 数据封装:
用户数据从应用层传输到链路层,每一层都要被该层的协议进行一定的封装,标识和改造,就是在数据头部或尾部增加一些信息。传输层tcp封装过后传给ip的数据单元叫TCP段,IP层的叫做IP数据报。


Linux网络编程-TCP/IP基本框架_第3张图片


UDP和TCP数据基本一致,只是他们的头部长度不同,名称也不同。很多应用程序都可以使用TCP和UDP来传送数据。传输层协议在生成数据段首部时要加入该应用程序的标识符(16位的端口号来标识)。


IP头部要说明数据传输的目的地以及上一层协议的类型标识,方便解包。


2.数据分用:
在接收端收到数据的时候,经过拆分的数据要重新组合,并去掉各层加上的头部信息,把数据还原。


Linux网络编程-TCP/IP基本框架_第4张图片
.

客户-服务器模型

1.并发型交互
一个服务器可以同时处理多个客户端的请求

2.重复型交互
一个服务器统一时间只能处理一个客户端的请求,只有处理完后才能处理下一个请求