网络编程
网络模型

几个概念
IP地址&端口
IP: 计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP地址,在同一个网络内部,IP地址不能相同。一般每台电脑都有独一无二的一个IP。
端口: 设备与外界通讯交流的出口,有虚拟端口和物理端口之分。物理端口主要指串口(232)、网口、USB口等。虚拟端口是一个逻辑端口,主要是用来区分同一台计算机上不同的网络程序,计算机内的端口号共有65536个,前1024个系统使用,所以在编写网络程序时不要使用。同时端口时区分TCP端口和UDP端口的,两者各有65536个,即6666的TCP端口和6666的UDP端口不是同一个。
三次握手&四次握手
三次握手: 在建立一个TCP连接时,客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发.
握手流程
-
Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SEND状态,等待Server确认。
(客户端向服务器端发出连接请求,等待服务器确认。) -
Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ACK=J+1,随机产生一个seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RECV状态。
(服务器端向客户端回送一个响应,通知客户端收到了连接请求。) -
Client收到确认后,检查ACK是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ACK=K+1,并将数据包发送给Server,Server检查ACK是否为K+1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态。
(客户端再次向服务器端发送确认信息,确认连接。)
四次挥手: 在断开一个TCP连接时,需要客户端和服务端总发送三个包以确认连接的断开。在Socket编程中,这一过程由客户端或服务端任一方执行close来触发。
挥手流程:
- Client发送一个FIN,用来关闭Client到Server的数据传输,Client进入FIN_WAIT_1状态
- Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状
- Server发送一个FIN,用来关闭Server到Client的数据传输,Server进入LAST_ACK状态
- Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态
TCP协议&UDP协议
1.UDP:
(1)面向无连接,将数据及源封装在数据包中,不需要建立连接
(2)每个数据报的大小限制在64K内
(3)因无连接,是不可靠协议
(4)不需要连接,速度快
2.TCP:
(1) 建立连接,形成传输数据的通道
(2)在连接中进行大数据量传输,以字节流的形式
(3)通过三次握手(四次挥手)完成连接,是可靠协议
(4)必须建立连接,效率会稍低
SOCKET
Socket时对TCP/IP协议的封装,它提供不同的API接口,帮助用户在不同计算机或虚拟机之间建立通信。
Socket API 使用书册

浙公网安备 33010602011771号