TCP:传输控制协议(传输层)
特点
面向连接
安全可靠
面向字节流
占用资源开销大
三次握手
指建立tcp连接时,需要客户端和服务端总共发送三次报文确认连接。
四次挥手
断开一个tcp连接,需要客户端和服务端发送四个报文以确认断开。
编程模型
client
socket--->connect--->send/write--->close
server
socket--->bind--->listen--->accept---> recv/read--->close
函数接口
1.socket
socket(AF_INET, SOCK_STREAM, 0);
创建套接字
2.connect
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
发送三次握手链接请求
3.send
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
发送数据
4.recv
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
接收数据
5.bind
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
绑定自己的ip与端口号
6.listen
int listen(int sockfd, int backlog);
监听三次握手链接请求
7.accept
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字
TCP报文头
标志位
1. URG: 紧急指针标志, 为1时表示紧急指针有效, 该报文应该优先传送。 2. ACK: 确认应答标志 3. PSH: 表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间 4. RST: 重置连接标志 5. SYN: 表示请求建立一个连接 6. FIN: finish标志, 表示释放连接
滑动窗口大小
是TCP流量控制得一个手段。目的是告诉对方, 本端TCP接受缓冲区还能容纳多少字节数据,这样对方就可以控制发送数据的速度,从而达到流量控制
机制
可靠性:
1)三次握手和四次挥手机制 2) 确认应答:TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号,保证数据不丢失的按序到达 3)超时重传:当发送端发送的数据在网络中丢失时,在一定时间内没有收到接收端的ACK,则发送端会重新发送丢失数据。 4)流量控制:按照ACK中“窗口大小”字段控制发送端的发送速度
提高性能:
1)滑动窗口:可以按照“窗口大小”, 一次发送多条后, 再等待应答。 2)延迟应答:当接收方处理速度很快时,可以延迟发送ACK,此时"窗口大小"会自动增大 3)捎带应答:搭载应用层的响应报文发送ACK。