网络编程

网络模型


几个概念


IP地址&端口

IP: 计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP地址,在同一个网络内部,IP地址不能相同。一般每台电脑都有独一无二的一个IP。

端口: 设备与外界通讯交流的出口,有虚拟端口和物理端口之分。物理端口主要指串口(232)、网口、USB口等。虚拟端口是一个逻辑端口,主要是用来区分同一台计算机上不同的网络程序,计算机内的端口号共有65536个,前1024个系统使用,所以在编写网络程序时不要使用。同时端口时区分TCP端口和UDP端口的,两者各有65536个,即6666的TCP端口和6666的UDP端口不是同一个。

三次握手&四次握手

三次握手: 在建立一个TCP连接时,客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发.

握手流程

  1. Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SEND状态,等待Server确认。
    (客户端向服务器端发出连接请求,等待服务器确认。)

  2. Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ACK=J+1,随机产生一个seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RECV状态。
    (服务器端向客户端回送一个响应,通知客户端收到了连接请求。)

  3. Client收到确认后,检查ACK是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ACK=K+1,并将数据包发送给Server,Server检查ACK是否为K+1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态。
    (客户端再次向服务器端发送确认信息,确认连接。)

四次挥手: 在断开一个TCP连接时,需要客户端和服务端总发送三个包以确认连接的断开。在Socket编程中,这一过程由客户端或服务端任一方执行close来触发。

挥手流程:

  1. Client发送一个FIN,用来关闭Client到Server的数据传输,Client进入FIN_WAIT_1状态
  2. Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状
  3. Server发送一个FIN,用来关闭Server到Client的数据传输,Server进入LAST_ACK状态
  4. 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 使用书册

posted @ 2021-11-07 18:44  北有高楼233  阅读(58)  评论(0)    收藏  举报