德阳网站设计,做生产计划类的网站,微信网站系统,wordpress翻页插件UDP#xff1a;用户数据报协议 传输层 特点: 1.无连接 2.不安全、不可靠 3.面向报文 4.占用资源开销小 TCP : 传输控制协议 传输层
1. TCP特点: 1.面向连接 2.安全、可靠 3.面向字节流 4.占用资源开销大 三次握手: 指建立tc…
UDP用户数据报协议 传输层 特点: 1.无连接 2.不安全、不可靠 3.面向报文 4.占用资源开销小 TCP : 传输控制协议 传输层
1. TCP特点: 1.面向连接 2.安全、可靠 3.面向字节流 4.占用资源开销大 三次握手: 指建立tcp连接时需要客户端和服务端总共发送三次报文确认连接。 四次挥手 断开一个tcp连接需要客户端和服务端发送四个报文以确认断开。 2. 编程模型 client socket---connect---send/write---close server: socket---bind---listen---accept--- recv/read---close 3. 函数接口: 1.socket socket(AF_INET, SOCK_STREAM, 0); 2.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能: 发送三次握手链接请求 参数: sockfd:套接字文件描述符 addr:存放目的地址空间首地址 addrlen:目的地址长度 返回值: 成功返回0 失败返回-1 3.send ssize_t send(int sockfd, const void *buf, size_t len, int flags); 功能: 发送数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 len:数据长度 flag:属性默认为0 返回值: 成功返回发送字节数 失败返回-1 4.recv ssize_t recv(int sockfd, void *buf, size_t len, int flags); 功能: 接收数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 len:最多接收数据长度 flags:接收属性默认为0 返回值: 成功返回实际接收字节数 失败返回-1 连接断开返回0 5.bind int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 6.listen int listen(int sockfd, int backlog); 功能: 监听三次握手链接请求 参数: sockfd:套接字文件描述符 backlog:最多允许等待尚未处理的三次握手链接个数 返回值: 成功返回0 失败返回-1 10.accept int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 功能: 处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字 参数: sockfd:套接字文件描述符 addr:存放发送端IP地址空间首地址 addrlen:想要接收的IP地址的长度 返回值: 成功返回新文件描述符 失败返回-1 4. TCP粘包问题 TCP协议是面向字节流的协议接收方不知道消息的界限不知道一次提取多少数据这就造成了粘包问题。 粘包问题出现的原因 1. 发送端需要等缓冲区满时才发送出去造成粘包 2. 接收端不及时的接收缓冲区内的包造成多个包接收。 避免粘包问题的方法 1. 对于定长的包保证每次都按固定大小读取即可// 结构体 2. 对于变长的包还可以在包和包之间使用明确的分隔符这个分隔符是由程序员自己来定的只要保证分隔符不和正文冲突即可。 5. TCP报文头 标志位 1. URG 紧急指针标志 为1时表示紧急指针有效 该报文应该优先传送。 2. ACK 确认应答标志 3. PSH: 表示发送数据提示接收端从TCP接收缓冲区中读走数据为接收后续数据腾出空间 4. RST 重置连接标志 5. SYN 表示请求建立一个连接 6. FIN finish标志 表示释放连接 滑动窗口大小是TCP流量控制得一个手段。目的是告诉对方 本端得TCP接受缓冲区还能容纳多少字节得数据 这样对方就可以控制发送数据的速度从而达到流量控制16bit因而窗口最大65535.
6. TCP的机制 TCP复杂是因为它既要保证可靠性同时又要尽可能的提高性能。 可靠性 1三次握手和四次挥手机制 (2) 确认应答TCP将每个字节的数据都进行了编号即为序列号。每一个ACK都带有对应的确认序列号保证数据不丢失的按序到达 3超时重传当发送端发送的数据在网络中丢失时在一定时间内没有收到接收端的ACK则发送端会重新发送丢失数据。 4流量控制按照ACK中“窗口大小”字段控制发送端的发送速度 提高性能 1滑动窗口可以按照“窗口大小” 一次发送多条后 再等待应答。 2延迟应答当接收方处理速度很快时可以延迟发送ACK此时窗口大小会自动增大 3捎带应答搭载应用层的响应报文发送ACK。