Linux网络编程

1、协议栈

Linux的优点之一就是在于它丰富而稳定的网络协议栈,其范围是从协议无关层(如通用的socket层接口和设备层)到各种网络协议的实现;对于网络理论介绍一般采用OSI模型,但是Linux中网络栈的介绍一般分为四层的Internet模型

2、网络模型

Linux网络编程

3、TCP/IP协议族体系结构

Linux网络编程

4、数据封装

应用程序数据在发送到屋里网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层协议的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程称为封装。

Linux网络编程

5、TCP/IP协议族

TCP/IP 实际上一个协同工作的通信家族,为网络数据通信提供通路。为讨论方便可TCP/IP 协议组大体上分为三部分:

    1、Internet 协议(IP)
    2、传输控制协议(TCP)和用户数据报协议(UDP)

    3、处于 TCP 和 UDP 之上的一组应用协议。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等

6、网络层

第一部分称为网络层。主要包括Internet 协议(IP)、网际控制报文协议(ICMP)和地址解析协议(ARP)
    Internet 协议(IP)

    该协议被设计成互联分组交换通信网,以形成一个网际通信环境。它负责在源主机和目的地主机之间传输来自其较高层软件的称为数据报文的数据块,它在源和目的地之间提供非连接型传递服务

网际控制报文协议(ICMP)
    它实际上不是IP层部分,但直接同IP层一起工作,报告网络上的某些出错情况。允许网际路由器传输差错信息或测试报文。
地址解析协议(ARP)
    ARP 实际上不是网络层部分,它处于IP和数据链路层之间,它是在32位IP地址和48位物理地址之间执行翻译的协议

7、传输层协议

第二部分是传输层协议,包括传输控制协议和用户数据报文协议
传输控制协议(TCP):
    该协议对建立网络上用户进程之间的对话负责,它确保进程之间的可靠通信,所提供的功能如下:
                1.监听输入对话建立请求
                2.请求另一网络站点对话
                3.可靠的发送和接收数据

                4.适度的关闭对话

用户数据报文协议(UDP):

        UDP 提供不可靠的非连接型传输层服务,它允许在源和目的地之间传送数据,而不必在传送数据之前建立对话。它主要用于那些非连接型的应用程序,如:视频点播

这部分主要包括Telnet,文件传送协议(FTP 和TFTP),简单文件传送协议(SMTP)和域名服务(DNS)等协议

8、IP 协议

IP主要有以下四个主要功能:
                        数据传送
                            寻址
                         路由选择
                      数据报文的分段

IP的主要目的是为数据输入/输出网络提供基本算法,为高层协议提供无连接的传送服务.这意味着在IP将数据递交给接收站点以前不在传输站点和接收站点之间建立对话。它只是封装和传递数据,但不向发送者或接收者报告包的状态,不处理所遇到的故障

IP包由IP协议头与协议数据两部分构成

Linux网络编程


TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的、基于流(stream)的服务。TCP协议使用超时重传、数据确认等方式来确保数据包被正确的发送到目的,因此TCP服务是可靠的。使用TCP协议通信的双方必须先建立TCP连接,并且在内核中为该连接维持一些必须的数据结构。当通信结束时,双方必须关闭连接以释放这些内核数据。

8、TCP协议头部结构

Linux网络编程


9、UDP

UDP协议(User DataGram Protocol,用户数据报协议)则与TCP协议完全相反,它为应用层提供不可靠、无连接和基于数据报的服务。不可靠意味着UDP协议无法保证数据从发送端正确的传送到接收端。如果数据在中途丢失,或者目的端通过数据校验发现数据错误而将其丢弃,则UDP协议只是简单的通知应用层发送失败。因此使用UDP协议的应用程序通常要自己处理数据确认、超时重传等逻辑性。

Linux网络编程