linux网络编程

来源:互联网 发布:淘宝网店装修模板代码 编辑:程序博客网 时间:2024/06/10 12:11

网络模型


TCP/IP协议族

TCP/IP 实际上一个协同工作的通信家族,为网络数据通信提供通路。为讨论方便可TCP/IP 协议组大体上分为三部分:
    1、Internet 协议(IP)
    2、传输控制协议(TCP)和用户数据报协议(UDP)
    3、处于 TCP 和 UDP 之上的一组应用协议。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等


1、传输层

传输层为两台主机上的应用程序提供端到端(end to end )的通信,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程

传输层协议主要有两个:TCP、UDP

TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流的服务。TCP协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端,因此TCP是可靠的。使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接的状态、读写缓冲区,以及诸多定时器。当通信结束时,双方必须关闭连接以释放这些内核数据。基于流的数据没有边界的限制,它源源不断的从通信的一端流入另一端。发送端可以逐字节地向数据流中写入数据,接收端也可以逐字节地将它们读出

TCP协议头

这里写图片描述

TCP三次握手四次挥手


建立连接时的三次握手: 
1.客户端向服务器发送连接请求,报文段包含SYN标志,是一个同步报文段,包含ISN值为4930的序号; 
2.服务器同意与客户端建立连接,同时发送自己的ISN值为1207的序号,并对第一个同步报文段进行确认,确认值为4931; 
3.客户端对第二个同步报文段进行确认,确认值为1208;

关闭连接的四次挥手: 
1.第四个报文段包含FIN标志,因此是结束报文段,客户端请求关闭连接; 
2.服务器确认该结束报文段,确认值4932; 
3.服务器发送自己的结束报文段; 
4.客户端确认该结束报文段,确认值1209;

UDP

(User Datagram Protocol,用户数据报协议),它为应用层提供不可靠、无连接和基于数据报的服务。“不可靠”意味着UDP协议无法保证数据从发送端正确的传送到目的端。如果数据在中途丢失,或者目的端通过数据校验发现数据错误而将其丢弃,则UDP协议只是简单的通知应用程序发送失败,因此,使用UDP协议的引用程序通常要自己处理数据确认超时重传等逻辑。UDP协议是无连接的,即通信双方不保持一个长久的联系,因此应用程序每次发送数据都要明确指定接收端的地址。基于数据报地服务,是相对基于流的服务而言的,每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将其内容一次性读出,否则数据将被截断。

UDP协议头




2.应用层

应用层负责处理应用程序的逻辑,比如文件传输、名称查询和网络管理

Telnet:远程登录协议,它使我们能在本地完成远程任务;

DNS(Domain Name Service):域名解析协议,提供机器域名到IP地址的转换;

TFTP(Trivial File Transfer Protocol):简单文件传输协议,是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。

FTP(File Transfer Protocol):文件传输协议,用于Internet上的控制文件的双向传输;

封装:应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递,每层协议都将在上层数据的基础上加上自己的头部信息,以实现该层的功能;


3.网际层

网络层实现数据包的选路和转发,通信的两台主机一般不是直接相连的,而是通过多个中间节点(路由器)连接的,网络层就是选择这些中间节点,以确保两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络拓扑连接的细节,使得在传输层和网络应用程序看来,通信的双方是直接相连的。

IP协议:根据数据包的目的IP地址来决定如何投递它,如果数据包不能直接发送给目标主机,那么IP协议就为它寻找下一个适合的下一跳(next hop)路由器,并将数据包交付给该路由器来转发,多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。

IP主要有以下四个主要功能:

1.数据传送

2.寻址

3.路由选择

4.数据报文的分段

IP报头


TCP与UDP的比较

TCP:一种可靠的、面向连接的和基于流的服务 
UDP:不可靠、无连接和基于数据报的服务

TCP:一对一的 
UDP:适用广播和多播

TCP:执行速度慢 
UDP:执行速度快