####################
TCP 和 UDP
####################
1. 端口:
1.1 端口与进程
(1) TCP的包不包含IP,但是有源端口和目的端口。在计算机内部可以使用管道、内存共享、信号量、消息队列等方法。本地进程可以通过PID(进程标识符)唯一标识进程。
(2) 若两台机器需要在运输层使用protocol port numner(协议端口号)
(3) IP层的ip地址可以唯一标识主机,TCP层协议和端口号可以唯一标识主机进程。所以[ip地址+协议+端口号]唯一标识网络进程, 也称该唯一标识为Socket(套接字)
1.2 端口
(1)TCP用16位端口号标识端口。2的16次方=65536个不同的端口。
(2)服务器端使用的端口号:
熟知端口号 :0 - 1023 (www.iana.org查到)
Service |
FTP |
TELNET |
SMTP |
DNS |
TFTP |
HTTP |
HTTPS |
SNMP |
Port |
21 |
23 |
25 |
53 |
69 |
80 |
443 |
161 |
登记端口号: 1024 - 49151
(3)客户端使用的端口号:
范围: 49152 - 65535 (仅在客户端进程运行时使用)
可以使用/etc/services文件查看端口占用
2. TCP 报文结构
2.1 报文介绍:
OSI七层协议中,二层(数据链路层)的数据叫[Frame],三层(网络层)的数据叫[Packet],四层(传输层)的数据叫[Segment]
(1)TCP报文[Segment]包括首部和数据部分,首部由20固定字节和4N可增字节组成
(2)TCP首部包含:source port, destination port, sequence number, acknowledgement number, offset, reserved, tcp flags, window size, checksum, ugent pointer, tcp options
(3)sequence number: 由4个字节构成(1-2^32<4G>)
(4)acknowledgement number: 期望收到对方的下一个报文段序号值
3. TCP的连接和释放:
3.1 建立连接(三次握手)
开始时,客户端服务器均为CLOSED状态。Server打开TCP服务,进入LISEN状态,监听特定端口
(1) 第一次握手:Client发送TCP报文,进入SYN_SENT状态,首部同步位SYN=1,sequenceNumer = J (TCP sync报文不携带data,但消耗一个序号)
(2) 第二次握手: Server收到SYN报文,若同意建立连接,向Client发送一个确认报文,进入SYN_RECVD状态,SYN=1,ACK=1, Acknowledgement Number =J +1, 自己的初始化序号为Sequance Number = K
(3) 第三次握手: Client 收到Server的确认报文,进入ESTABLISHED状态。首部的SYN不再为1,而ACK=1, Acknowledgement Numner = K+1, sequence Numer = J+1, 服务器进入ESTABLISHED状态
3.2 释放连接(四次挥手)
在ESTABLISED状态,其中一方主动断开连接
(1)第一次挥手:Client发送结束报文,状态进入FIN_WAIT1状态
(2)第二次挥手:Serve收到Client的结束报文段,然后发送确认报文段,进入CLOSE_WAIT
(3)第三次挥手: Server向Client发送报文段,进入LAST_ACK状态
(4)第四次挥手:Client收到Server的结束报文段,发送确认报文段,进入TIME_WAIT状态,经过2MSL后,自动进入CLOSED状态
3.3 状态流转
4. TCP 网络编程接口
4.1 Socket:
在linux/Unix中,一切皆文件,可以用【Open->write/read->close】模式来操作。Socket是该模式的特殊实现。TCP/IP协议的应用程序遵循UNIX BSD的Socket Interface. 网络中进程通信是一切皆Socket.
4.2 Socket:
一组函数,由操作系统提供,用以创建网络应用。
4.3 Linux中,一个Socket就是通信的一个端点。从Linux程序角度,Socket是一个有相应描述符的文件。用socket()用于创建一个socket描述符,唯一标识这个socket。常用函数有socket(), bind(), listen(), connect(), accept(), write(),read(), close()
4.4 Socket交互流程
其中服务器和客户端建立连接的部分,使用了TCP三次握手原理
5. UDP介绍
5.1 UDP (User Datagram Protocol):传输层协议。
特点:无连接,不保证可靠交付,面向报文,没有阻塞控制,支持一对一,一对多,多对一和多对多的交互通信(广播和多播),首部开销小(只有8个字节分为四部分)
常用场景:名字转换(DNS),文件传送(TFTP),路由选择协议(DIP),IP地址配置(BOOTP,DHTP),网络管理(SNMP),远程文件服务(NFS),IP电话,流式多媒体通信
5.2 UDP 报文结构: 首部字段8字节,四个2字节字段构成
源端口 | 目的端口 | 长度 | 检验和
参考:https://jerryc8080.gitbooks.io/understand-tcp-and-udp/chapter6.html