学校时教过网络编程,但是工作后一直没接触,作为码农基础知识,复习下吧。
分层
有七层协议,五层,四层之说,都一样。作为入门只需要知道四层。
- 链接层
- 网络层:使用IP协议让通过路由器连接起来的计算机能够互相通信。是计算机与计算机的通信。
- 运输层:使用UDP和TCP协议完成不同计算机的应用进程间的通信。是应用进程与应用进程的通信。
- 应用层:规定应用进程在通信时的协议。HTTP,FTP等。是对运输数据的进一步加工,或者说按规则封装解析,使其适合某一类进程使用,比如文件传输用FTP。
TCP
- 运输层协议之一。
- 面向连接。发送数据前,两端需要进行三次握手确认连接后,方可发送数据。所以说是可靠的。
- 有序的。通过滑窗,ack信号,重发机制来完成。
UDP
- 运输层协议之一。
- 无连接。直接发送数据,不保证数据是否能收到。所以说是不可靠的。
- 无序的。可能丢失,重复。
Socket(套接字)
- 对TCP/IP的封装,支持TCP和UDP协议,是一套调用接口(API)。
- 抽象的表示端口到端口的连接。
- 连接过程:服务器监听,客户端请求,连接确认。
HTTP
- 应用层协议之一。
- Unity的WWW。
- 规定数据的封装解析规则。
- 基于TCP。但是只能由客户端先主动向服务端发送请求。
- HTTP1.1前是短连接,HTTP1.1开始支持长连接。
- HTTP1.1之前,发一条数据,需要先确认连接,然后发送一条数据,然后断开连接.
- 其实一般都认为HTTP是短连接,而socket(TCP)被用于实现长连接。
长连接和短连接
- 一般是针对TCP而言的。
- 建立TCP连接,发送一条数据后,立即断开连接,那么就是短连接。反之,维持连接状态,知道某一端主动关闭接口,那么就是长连接。
- 如果端对端的连接数多,但一条连接线路中请求不多,就用短连接。因为保持连接也需要占用资源。
- 如果一个端对端的连接中,请求很多,就用长连接。因为建立连接的过程也是个消耗过程。
Socket过程
- 建立一个Socket需要知道,协议,发送端端IP,发送端端端口号,接收端IP,接收端端口号。
- 服务端:new socket -> bind -> listen -> accept -> read/write -> close (listen监听端口,accept收取客户端Socket)
-
客户端:new socket -> connect -> read/write -> close
Socket建立过程.jpg
TCP连接的三次握手
- 客户端发送同步信号syn(j) -> 服务端返回同步信号syn(k),确认信号ack(j+1) -> 客户端发挥确认信号ack(k+1)
- 客户端调用connect -> 服务端accept -> 客户端connect得到返回 -> 服务端accept得到返回
TCP三次握手.png
参考
之前写的一个相关的测试工程
Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)
TCP、UDP以及TCP滑窗,它们的区别
网友评论