网络架构
- 五层网络架构:物理层、链路层、网络层、传输层、应用层
- 七层网络架构:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
TCP/IP
- 网络层的ip协议+传输层的tcp协议
- 在网络层利用ip协议定位主机
- 在传输层利用tcp协议进行可靠性保证
- tcp/ip是个协议组包括了:
- 应用层:FTP、HTTP、TELNET、DNS、smtp(邮箱)
- 传输层:TCP UDP
- 网络层:IP ICMP
- 可以用Socket实现HTTP。Socket是实现传输层协议的一种编程API,可以是TCP,也可以是UDP。
TCP
-
面向连接、可靠的传输协议,在传输前需要先建立连接
-
可靠性:
- 超时重发防止数据丢失
- 丢弃重复数据
- 首部和数据的检验和,确保数据在传输过程没有出错
- tcp协议对报文段进行重排序,保证数据保序
- 量控制,只接受特定缓存大小的数据
-
TCP协议可以保序
-
对于传输的数据大小没有限制
-
由于加入了可靠性控制,tcp的效率不如udp
-
使用场景:http网页、smtp邮箱、ftp文件传输
创建连接
- 一个Socket等待请求创建连接,一个Socket主动创建连接。一旦建立连接成功后,两个socket都可以双向数据传输
- 创建连接三次握手:
- 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手;
UDP
- 是一个无连接的,面向数据报的协议
- 协议本身不可靠,不提供超时重发机制;但是传输效率较高
- udp中的每个数据包都有完整的源地址、目的地址、端口信息
- 每个数据报不能超过64k
- 使用场景:聊天室、语音广播
UDP和TCP
TCP | UDP | |
---|---|---|
数据传输形式 | 面向字节流 | 面向分组 |
保序 | 是 | 否 |
建立连接 | 是 | 否 |
可靠 | 是 | 否 |
效率 | 较低 | 较高 |
Socket
- 套接字:ip+port。一个通信连的句柄;应用程序通过socket进行网络通信。使得程序员可以方便的使用TCP/IP协议栈
- Socket是应用层与TCP/IP协议族通信的中间软件抽象层
- socket是一个门面设计模式,将复杂的协议隐藏
- 进行网络通信必要的五要素:协议、本地主机ip、本地进程port、远程主机的ip、远程进程port
http
- http是建立在tcp上的应用层协议
- 在客户端进行请求的时候需要先建立tcp连接,请求结束后会主动释放tcp连接(短连接)
- http1.1后提供了只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。
- http是一种应用层协议,在发送到传输层后会包装成tcp协议
- socket可以实现http协议,socket选用TCP协议
常见问题
- tcp/ip和http的关系:tcp/ip是传输层和网络层的协议,http是应用层的协议,如果只有传输层以下,收到数据并不知道如何进行解析
- tcp/ip和socket的关系:tcp/ip是协议,而socket是协议上的一个抽象层,方便使用协议进行应用开发。
参考:https://blog.csdn.net/u012439774/article/details/53634927