TCP | UDP 基础知识

####################

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值