网络编程学习笔记2 ------ TCP/UDP
1. TCP
TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。
1.1 TCP连接: TCP三次握手的Socket过程
- 服务器调用socket()、bind()、**listen()完成初始化后,调用accept()**阻塞等待;
- 客户端Socket对象调用connect()向服务器发送了一个SYN并阻塞;
- 服务器完成了第一次握手,即发送SYN和ACK应答;
- 客户端收到服务端发送的应答之后,从connect()返回,再发送一个ACK给服务器;
- 服务器Socket对象接收客户端第三次握手ACK确认,此时服务端从**accept()**返回,建立连接。
1.2 TCP断开: TCP四次挥手的Socket过程
- 某个应用进程调用close()主动关闭,发送一个FIN;
- 另一端接收到FIN后被动执行关闭,并发送ACK确认;
- 之后被动执行关闭的应用进程调用close()关闭Socket,并也发送一个FIN;
- 接收到这个FIN的一端向另一端ACK确认。
1.3 通过序列号与确认应答提高传输可靠性
TCP传输协议,两台主机建立好连接之后,开始进行数据传输,当发送端的数据到达接收端,接收端会返回一个收到消息的应答,这个消息叫做确认应答ACK。 TCP通过确认应答ACK实现可靠的数据传输。
发送端将数据发送之后,会等待对方的确认应答,如果有确认应答,说明数据已经成功到达对端,反之,发送端在一定时间内没有收到ACK应答,就认为数据丢失,会重新 进行发送。
序列号是按照顺序给发送数据的每一个字节都标上号码的编号,接受端通过数据包首部中的序列号和数据长度,将自己下一次应该接收的数据的序列号作为确认应答发送给 发送端,这样,通过序列号和确认应答号,TCP可以实现可靠传输。
1.4 TCP 通信模型
2. UDP
UDP传输不提供复杂的控制机制,它利用IP提供面向无连接的通信服务。UDP报文没有可靠性保证,顺序保证,和流量控制,可靠性比较差,传输过程中即使出现包丢失也不会重发。 也正是因为这些,它的资源消耗小,传输速度快,通常音频,视频在传送时用UDP传输较多。
UDP无需连接,即用即发。
2.1 UDP通信模型