Socket编程(1) --TCP/IP简述

ISO的OSI

    OSI(open system interconnection)开放系统互联模型是由ISO国际标准化组织定义的网络分层模型,共七层, 从下往上为:

Socket编程(1) --TCP/IP简述_第1张图片

OSI七层参考模型

物理层(Physical Layer)

物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit/二进制位)。属于本层定义的规范有EIA/TIA RS-232、RJ-45等,实际使用中的设备如网卡属于本层。

数据链路层(Data Link Layer)

对物理层收到的比特流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传输。在数据链路层中数据的单位为帧(frame)。属于本层定义的规范有HDLC、PPP、STP等,实际使用中的设备如switch交换机属于本层。

网络层(Network Layer)

网络层负责将各个子网之间的数据进行路由选择,分组与重组。本层中数据传输的单位为数据包(packet),TCP/IP体系中又叫IP数据报。属于本层定义的规范有IP、RIP、OSPF、ICMP、IGMP等。实际使用中的设备如路由器属于本层。

传输层(Transport Layer)

传输的单位是数据段。提供可靠的数据传输服务(注意OSI的传输层与TCP/IP的传输层的功能不尽相同),它检测路由器丢弃的包,然后产生一个重传请求,能够将乱序收到的数据包重新排序。

会话层(Session Layer)

传输SPDU。管理主机之间会话过程,包括会话建立、终止和会话过程中的管理

表示层(Presentation Layer)

传输PPDU。表示层对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式转换等。

应用层(Application Layer)

传输APDU。应用层与应用程序界面沟通,以达至展示给用户的目的。 在此常见的协定有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等

 

TCP/IP模型

Socket编程(1) --TCP/IP简述_第2张图片

 

Socket编程(1) --TCP/IP简述_第3张图片

假设在一个局域网(LAN)如以太网中有两台主机,二者运行FTP协议:

Socket编程(1) --TCP/IP简述_第4张图片

 

封装

当应用程序传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。T C P传给I P的数据单元称作T C P报文段或简称为T C P段(T C P s e g m e n t)。I P传给网络接口层的数据单元称作I P数据报(IP datagram)。通过以太网传输的比特流称作帧(Fr a m e )。

Socket编程(1) --TCP/IP简述_第5张图片

由于T C P、U D P、I C M P和I G M P都要向I P传送数据,因此I P必须在生成的I P首部中加入某种标识,以表明数据属于哪一层。为此, I P在首部中存入一个长度为8 b i t的数值,称作协议域。1表示为I C M P协议, 2表示为I G M P协议, 6表示为T C P协议, 1 7表示为U D P协议。

类似地,许多应用程序都可以使用T C P或U D P来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。T C P和U D P都用一个1 6 b i t的端口号来表示不同的应用程序。T C P和U D P把源端口号和目的端口号分别存入报文首部中。

网络接口分别要发送和接收I P、A R P和R A R P数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16 bit的帧类型域。

 

分用

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用

Socket编程(1) --TCP/IP简述_第6张图片

为协议I C M P和I G M P定位一直是一件很棘手的事情。把它们与I P放在同一层上,那是因为事实上它们是I P的附属协议。但是在这里,我们又把它们放在I P层的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。

对于A R P和R A R P,我们也遇到类似的难题。在这里把它们放在以太网设备驱动程序的上方,这是因为它们和I P数据报一样,都有各自的以太网数据帧类型。我们又把A R P作为以太网设备驱动程序的一部分,放在I P层的下面,其原因在逻辑上是合理的。

 

 

端口分类

TCP/IP 协议中的端口在报头中占2个字节即16位,范围是从0-65535。端口号用来表示和区别网络中的不同应用程序

0-1023之间的端口号,也叫Well Known ports。这些端口由 IANA 分配管理。

分为三大类:

(1)公认端口(Well Known Ports):0-1023之间的端口号,也叫Well Known ports。这些端口由 IANA 分配管理。IANA 把这些端口分配给最重要的一些应用程序,让所有的用户都知道,当一种新的应用程序出现后,IANA必须为它指派一个公认端口。 
常用的公认端口有:

  • FTP : 21
  • TELNET : 23
  • SMTP : 25
  • DNS : 53
  • TFTP : 69
  • HTTP : 80
  • SNMP : 161

(2)注册端口(Registered Ports):从1024-49151。是公司和其他用户向互联网名称与数字地址分配机构(ICANN)登记的端口号,利用因特网的传输控制协议(TCP)和用户数据报协议(UDP)进行通信的应用软件需要使用这些端口。在大多数情况下,这些应用软件和普通程序一样可以被非特权用户打开。

(3)客户端使用的端口号:49152~65535.这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号。被保留给客户端进程选择暂时使用的。也可以理解为,客户端启动的时候操作系统随机分配一个端口用来和服务器通信,客户端进程关闭下次打开时,又重新分配一个新的端口。

 

 

 

 

你可能感兴趣的:(linux环境编程)