UNIX网络编程卷1:套接字联网API 详解笔记

UNIX网络编程卷1:套接字联网API 详解笔记
第一部分:简介和TCP/IP
1.Socket 套接字
sockfd = socket(AF_INET(网际流), SOCK_STREAM, 0);

2.*bind(int fd, const struct sockaddr sa, socklen_t salen)
套接字绑定函数

3.监听套接字
socket、bind、listen三个函数依次执行,是TCP服务器准备监听描述符的标准步骤。
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bind(sockfd, (SA* )servaddr, sizeof(servaddr));
listen(sockfd, LISTENQ)

4.接受客户连接,发送应答
connfd = accept(sockfd, (SA*)NULL, NULL);
accept是进程进入睡眠,TCP握手协议完成之后,accpet接收到应答,返回值称为已连接描述符,
用于与已经连接上的客户端进行通信。

5.OSI模型
应用层
表示层 应用层
会话层
传输层 TCP UDP
网络层 IPv4、IPv6
数据链路层 设备驱动程序和硬件
物理层

6.UDP 是简单不可靠的传输协议。

7.TCP是复杂而又可靠的传输协议。

8.STCP是可靠的传输协议,同时还提供消息边界、传输级别多宿支持以及将头端阻塞减小到最少的一种方法。

协议:
IPv4 32位地址,给TCP、UDP、STCP、ICMP、IGMP提供分组递送服务
IPv6 128位地址,给TCP、UCP、STCP、ICMPv6 提供分组递送服务
TCP 传输控制协议 给用户提供全双工字节流,TCP套接字是一种流套接字,可用IPv4或IPv6实现
UDP 用户数据报协议 UDP套接字是一种数据包套接字,不保证数据准确到达,可用IPv4或IPv6实现
SCTP 流控制传输协议 提供可靠的全双工关联的面向连接的协议,STCP是多宿的,每个关联的两端涉及一组IP地址和端口号。
ICMP 网际消息控制协议 主要处理路由器与主机之间的错误和控制消息。ping 和 traceroute使用这个协议
IGMP 网际组管理协议 IGMP用于多播
ARP 把一个IPv4地址转换成一个硬件地址
RARP 把一个硬件地址转成IPv4地址
ICMPv6 集成了ICMPv4 ARP 以及 IGMP的功能
BPF BSD分组过滤器 用于提供对数据链路的访问能力
DLPI 数据链路提供者接口 用于提供对数据链路的访问能力

9.TCP和UDP的特性:
UDP
UDP缺乏可靠性,需要对应用程序添加不同的功能,对端的确认、本端的超时与重传等;UDP提供无连接的服务,表示一个客户端可以向多个服务端发送同一包数据。

TCP
TCP可靠性:1.TCP建立服务器与客户端之间的连接;2.TCP有消息应答机制;3.TCP拥有一个计算客户端与服务器之间传输一次需要的时间;3.TCP会对多次分包传输的数据加上序列号,重新排序;4.TCP 提供流量控制,保证客户端传给服务器的数据永远不会超过服务器剩余的空间;TCP是全双工协议。

流控制传输协议(SCTP)
STCP与TCP、UDP类似。与TCP不同的是STCP是面向消息的协议,与UDP一样,将发送端写入的每条记录的长度随数据一道传递给接收端应用。STCP可以在连接的端点之间提供多个流,并且相互不会影响。STCP支持多宿性,保持可以支持多个IP地址。

10.TCP选项
MSS选项:最大分节大小
窗口规模选项:最大窗口规模可以达到1GB
时间戳选项:防止由失而复现造成的数据损坏

11.服务器发送数据耗时长时,则先是发送确认,后是应答。

12.MSL是任何IP数据报能够在英特网中存活的最长时间。最长分节时间。传统是30秒。

13.TIME_WAIT状态 持续时间大约是MSL的两倍
1.可靠的实现TCP全双工连接的终止
2.允许老的分解在网络中消逝(防止老的重复分组被认为是新的分组的化身)

14.SCTP的连接建立与终止
四路握手
(1)服务器被动打开,通过调用socket、bind、listen。
(2)客户通过调用connect或者发送一个隐式打开该关联的消息进行主动打开。
(3)服务器回复一个INIT ACK
(4)客户端发送一个COOKIE ECHO回给服务器
(5)服务器回复一个ACK证明发送的是正确的cookie

15.SCTP的分组单位信息为块
SCTP选项:
1.动态地址扩展,允许协作的SCTP端点从已有的某个关联中动态增删IP地址;
2.不完全可靠性扩展,允许协作的SCTP端点在应用进程的指导下进行数据限制,去掉过于陈旧的消息。

16.端口号
TCP/IP协议分配给FTP服务器的端口号是21
UDP分配给TFTP(简化邮件传送协议)的端口号是69

17.众所周知的端口号为0~1023,由IANA分配和控制,可以将一个端口号同时分配给TCP、UDP、SCTP同一给定的服务。

18.已登记的端口号为102449151,不受IANA控制,但是会登记到IANA的端口使用表中,相同的端口也可分配给TCP、UDP给定的服务。如60006063分配给这两种协议的X Window服务器。

49152~65535是动态的或私用的端口,是临时端口,不受IANA管辖。

19.套接字对
TCP套接字对是一个定义连接的两个端点的四元组:本地IP地址、本地的TCP端口号、外地IP地址、外地TCP端口号。套接字对唯一标识一个网络上的每个TCP连接,但是对于一个端点多宿的情况下,一个端点就需要多个四元组标识。
标识每个端点的两个值(IP地址和端口号)通常称为一个套接字。

IPv4数据包最大为65535字节,包括IPv4首部。
IPv6数据包最大为65575字节,包括IPv6首部,40位。
MTU 最大传输单元,IPv4规定的最小链路MTU为68字节,IPv6规定的最小链路的MTU为1280字节。
IP数据报超出相应链路的MTU时,IPv4和IPv6都将进行分片,这些片段在最终到达目的地之前不会进行重组。IPv4主机和路由器(转发)都会对自身发出的数据报进行分片;而IPv6只有主机会对发出的数据报进行分片,而路由器不会对其转发的数据报进行分片。
IPv4首部的DF位专门用于设置分片,IPv6每个数据报都隐含一个数据位,所以IPv6传输数据报是要么用最小的传,要么必须支持。
IPv4和IPv6都有最小缓冲区重组大小,IPv4为256字节,IPv6为1500字节。
TCP有个MSS(最大分节大小),通知对方重组缓冲区大小的实际值,避免分片;MSS通常设置为MTU减IP和TCP首部的固定长度。以太网中IPv4为1460,IPv6为1440(TCP首部20字节,IPv4首部20字节,IPv6首部40字节)。TCP的MSS选项中,MSS是一个16为的字段,IPv4最大值为65495,IPv6的最大值为65515。
SCTP基于对端所有地址发现的最小路径MTU保持一个分片点。

后续还会更新。

猜你喜欢

转载自blog.csdn.net/weixin_34764432/article/details/84929094