Linux/UNIX网络编程笔记(一) TCP/IP简介

TCP/TP 简介

 

基本的c/s服务模型

网络编程是指编写的网络通信程序可以与网络上的其他程序进行通信。相互通信的程序通常分为两部分:客户端 和 服务器端 。

客户端的数据有应用层的客户端软件产生,这些数据到达客户端系统的内核协议栈,并从上到下的经过协议栈的每一层,各层都要对数据进行封装,最后组合好的帧被传给底层的网络设备,有网络设备的物理层实现数据传输。

OSI模型和TCP/IP四层结构

数据链路层:它是随系统提供的设备驱动程序和网络硬件。

网络层:负责相邻互联网上的不同主机之间的通信,主要包括IPV4,ICMP,RIP,IGMP等协议。

传输层:负责主机中两个进程之间的通信,主要包括TCP、UDP两种协议。

应用层:即应用进程所在的层。套接字编程就是应用层到传输层的接口

操作系统都提供了分隔用户与内核的机制,因此应用层和传输层之间的接口自然成了应用程序编程接口,也就是常说的API。

IP协议的介绍

 报文格式、IP地址分发(A,B,C,D,E五种类型)、子网掩码

TCP面向连接的协议

三次握手协议:

        

 

建立TCP连接的步骤:

(1)      服务器必须已准备好接收客户的连接请求,这通过调用socket、bind和listen函数来完成,客户通过调用connect函数进程主动打开,这引起客户端发送一个SYN到服务器端。

(2)      服务器收到客户端发来的SYN后,必须发送ACK对其进行确认,同时发送一个自己的SYN给客户端,表示接受客户端建立连接的请求

(3)      客户端发送ACK确认服务器的SYN,连接建立成功。

 

四次终止连接:


释放步骤如下:

(1)      客户端应用进程调用close,发送一个FIN主动关闭连接。

(2)      服务器收到FIN后执行被动关闭,发送ACK对客户端的FIN进行确认

(3)      当服务器将待发送的数据发送完后,调用close关闭它的套接字,这导致它的TCP发送一个FIN给客户端

(4)       接收到服务器的FIN后,对其发送一个ACK确认,当前连接被彻底关闭(停留在该状态的持续时间是报文最长生命周期的两倍,即2MSL。当TCP的一端发起主动关闭,在发出最后一个ACK包后,即3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包)

 

 

 

UDP协议

 UDP:用户数据报协议时面向无连接的服务,提供不可靠的数据传输

虽然提供不可靠的数据传输,但是在很多方面仍使用UDP协议,如名字转换DNS,远程文件服务器NFS等服务都使用UDP协议。

端口号

多个进程可同时使用TCP或UDP,用16位的端口号来区别这些进程。

(1)      众所周知的端口号:0~1023.

(2)      经注册的端口号: 1024~49151

(3)      动态或使用的端口:49152~65535 ,是临时端口。

你可能感兴趣的:(Linux/UNIX网络编程)