OSI
应用层: 用户的应用程序和网络之间的接口,包含:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
表示层: 协商数据交换格式。
会话层: 允许用户使用简单易记的名称建立连接。
传输层: 提供终端到终端的可靠连接,包含:传输控制协议(TCP)。
网络层: 使用权数据路由经过大型网络,互联网协议(IP)。
数据链路层: 决定访问网络介质的方式。在此层将数据分帧,并处理流控制,包含:以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)。
物理层: 将数据转换为可通过物理介质传送的电子信号,包含:针脚、电压、线缆规范、集线器、中继器、网卡、主适配器等。
三次握手(建立连接)
第一次握手:客户端向服务端发送连接请求
第二次握手:服务端回复客户端收到连接请求,同意连接请求
第三次握手:客户端回复服务端收到同意连接请求
四次挥手(断开连接)
第一次挥手:客户端向服务端发送断开请求
第二次挥手:服务端回复客户端收到断开请求,请等待
第三次挥手:服务端回复服务端收到同意断开请求
第四次挥手:客户端向服务端发送收到同意断开请求
常见协议分布
物理层:以太网,调制解调器,电力线通信(PLC),SONET/SDH,G.709,光导纤维,同轴电缆,双绞线等。
数据链路层:Wi-Fi,GPRS,令牌环,以太网,WiMAX,ATM,DTM,FDDI,帧中继,EVDO,HSPA,HDLC,PPP,L2TP,PPTP,ISDN,STP,CSMA/CD等。
网络层协议:IP,RARP,ICMP,ICMPv6,IGMP,IS-IS,IPsec,ARP,RIP等。
传输层协议:TCP,UDP,TLS,DCCP,SCTP,RSVP,OSPF等。
应用层协:FTP,DNS,DHCP,HTTP,POP3,SIP,SSH,TELNET,NTP,Gopher,IMAP4,IRC,NNTP,XMPP,SMTP,SNMP,RPC,RTCP,RTP,RTSP,SDP,SOAP,GTP,STUN,SSDP,BGP等。
SOCKET
套接字是通信的基石,支持TCP/IP协议的网络通信的基本操作单元,是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:协议,IP地址,协议端口,远程主机IP地址,远程主机协议端口。
TCP同时为多个程序提供服务时,多个TCP连接或多个程序需要通过同一个协议端口传输数据,为了区别不同的程序进程和连接,系统为程序与TCP/IP协议交互提供了套接字接口。
HTTP
协议即超文本传送协议,是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接的特点
一次连接:客户端发送的每次请求服务器都要回送响应,请求结束后,会主动释放连接。
短连接:保持客户端程序的在线状态,客户端需要向服务器不断地发起连接请求。若服务器长时间无法收到客户端的请求,则认为客户端下线,若客户端长时间无法收到服务器的回复,则认为网络已经断开。通常客户端每隔一段时间向服务器发送连接的请求,服务器收到请求后对客户端进行回复。
TCP/IP
TCP/IP是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议除了TCP 和IP协议,还有FTP、SMTP、TCP、UDP、IP等协议构成。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。
SOCKET,HTTP,TCP/IP联系
SOCKET与TCP/IP
SOCKET是操作TCP/IP的编程接口,创建Socket连接时,可以指定传输层协议,使用TCP协议时,Socket连接是TCP连接。Socket本身并不是协议,而是调用接口,通过Socket,使用TCP/IP协议。
SOCKET与HTTP
Socket是长连接:通常Socket连接是TCP连接,连接建立,通信双方即可开始相互发送数据内容,直到双方连接断开。
HTTP是短连接:请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
Socket连接,服务器就可以直接将数据传送给客户端;在实际网络中,客户端到服务器之间的通信需要多个节点,例如路由器、网关、防火墙等,防火墙会关闭长时间非活跃状态的连接,导致Socket 断开,因此需要发送心跳包。
HTTP连接,服务器需要等到客户端发送请求后才能将数据传回给客户端。客户端定时向服务器端发送连接请求,可以保持在线,如果服务器有新数据就传给客户端。
知识点总结
为什么挥手需要四次
服务器在收到FIN报文后可以立即发送ACK报文,表明服务器收到报文;但是服务器发送FIN报文需要等到处理完接收缓冲区的数据。
为什么会存在一个TIME_WAIT状态
确保服务器收到最后一段ACK报文。
如何确保服务器收到了最后一段ACK报文
如果服务器没有收到最后一段ACK报文,就会触发超时重传,服务器会再次发送FIN ACK报文。那么在2MSL的时间内,客户端会再次收到FIN报文,客户端就知道刚刚发送的ACK丢失,需要再次发送。服务器收到了最后一段ACK报文,客户端在2MSL的时间内就不会收到任何报文,客户端就知道刚刚发送的ACK报文没有丢失,不需要再次发送,客户端进入CLOSED状态。
HTTP,socket使用场景
HTTP:不需要时刻保持连接在线,客户端资源的获取、文件上传等。
Socket的:聊天程序,建立一次连接,重复使用连发送和接收消息。
浏览器在与服务器建立TCP连接后,是否会在一个HTTP请求完成后断开,什么情况下会断开
默认开启持久连接,除非请求中写明Connection:close,浏览器和服务器之间是会维持一段时间的TCP连接,不会一个请求结束就断掉。
一个TCP连接可发送HTTP请求个数
maxKeepAliveRequests配置TCP接受最大的Http请求数目,keepalive请求达到最大值,Tomcat关闭连接。
一个TCP连接中HTTP可多请求可一起发送吗
HTTP/1.1单个TCP连接在同一时刻只能处理一个请求。HTTP2可以在一个 TCP 连接中同时完成多HTTP请求。
浏览器对同一 Host建立TCP连接到数量有限制吗
Chrome最多允许对同一个 Host 建立六个 TCP 连接,不同浏览器不同。