决战Offer---计算机网络

来源:互联网 发布:flord算法 编辑:程序博客网 时间:2024/06/02 16:07

TCP/IP协议的体系结构

TCP/IP协议族四层模型:数据链路层、网络层、传输层、应用层
(OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)

数据链路层:例如以太网驱动程序
网络层:两台机器一般通过很多个中间节点进行通信,选择这些中间节点让这两台计算机进行通信。路由器就是工作在网络层。IP协议
传输层:关注数据包的起始端和目标端,不在乎中间过程。TCP、UDP协议
应用层:负责应用程序的逻辑,文件传输,网络管理等。

TCP协议(传输控制协议):为应用层提供可靠的、面相连接的基于流的服务。可靠性:数据会准确无误的发送到目标端;面向连接(一对一):使用TCP协议的双方必须先进行TCP连接;基于流:发送端可以逐个字节的发送数据,接收端也可以逐个字节的接受它们。
这里写图片描述
TCP头部结构:
这里写图片描述

UDP协议:为应用层提供不可靠的、不面相连接的、数据报服务。不可靠:无法保证数据被正确接收,只能尽力而为;无连接(可以一对多):通信双方不保证一个长久的连接,每次发送数据都要指明接收端的地址;数据报服务:每个UDP数据报都有一个长度,接收端必须以该长度的最小单位将其从内存中一次读出,否则数据就断了。
这里写图片描述

DNS协议:机器域名到IP地址的一种转换。

TCP/IP协议三次握手与四次握手:

三次握手:即建立TCP连接,需要客户端和服务端总共发送3个包以确认数据的连接。
这里写图片描述
1)第一次握手(看看客户端和服务器之间能不能通信):客户端将标志位SYN置为1,随机产生一个只seq=J,并将该数据包发送给服务器,客户端进入SYN_SEND状态,等待服务器确认。
2)第二次握手(服务器告诉客户端我们确实能通信了):服务器收到数据包之后由标志位SYN=1知道客户端请求建立连接,服务器将标志位SYN和ACK(携带ACK标志的报文段为确认报文段)都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器进入SYN_RCVD状态。
3)第三次握手(客户端知道我们可以通信之后告诉服务器我们可以传输数据了):客户端收到确认之后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK=1,ack=K+1,并将该数据包发送给服务器,服务器检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器进入连接状态,完成三次握手,随后客户端和服务器之间可以开展数据传输了。

四次握手(终止TCP连接):指断开TCP连接时,需要客户端和服务器之间一共发4个数据包以确认连接的断开。在socket编程中这一指令是由客户端或服务端的任意一方指令“断开”指令来触发。
这里写图片描述
1)第一次握手(告诉服务器我要关闭了):客户端发送一个FIN(携带FIN的为结束报文段),用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1等待关闭状态。
2)第二次握手(服务器收到了你的关闭请求):服务器收到FIN之后发送一个ack给客户端,ack=FIN++。
3)第三次握手(给你个随机验证码N,我们可以关闭了):服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK最后确认关闭状态。
4)第四次握手(给服务器验证码N+1,好的可以正式断开了):客户端收到FIN之后,客户端进入TIME_WAIT状态,接着发送一个ACK=1给服务器,ack=N+1(是N+1图例标错了),服务器收到之后即确认关闭与客户端的连接。

TIME_WAIT状态:1)可靠的终止TCP连接 2)保证迟来的TCP报文段有足够的时间被识别并丢弃:主机B收到主机A发来的关闭连接请求,表示A->B可以断开连接,但是未必B->A可以断开连接,因为B->A有可能还有一些数据没有发送过去,这时需要进行一个wait等待,等 B->A的数据全发走后B再给A第三次握手,随后再第四次握手。

Socket

1.什么是Socket?Socket又称为套接字,应用程序通常通过“套接字”想网络发出请求或者应答请求。
2.ServerSocket:它用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端会产生一个Socket套接字,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同的级别。
3.建立Socket连接的步骤:1)服务器监听 2)客户端发出请求 3)建立连接 4)通信
4.Socket特点:1)基于TCP连接,数据传输有保障 2)适用于建立长时间的连接 3)经常应用于即时通信

HTTP

HTTP请求报文和响应报文的格式
1)什么事HTTP事务?
HTTP事务=(客户端的)请求命令 + (服务器的)响应结果
这里写图片描述

2)什么是报文流?
报文先流入服务器,再由服务器流回给客户端。
这里写图片描述
报文都是向下流动的
这里写图片描述

3)请求报文的格式
这里写图片描述
请求行:请求方法(客户端希望服务器干什么,比如GET、POST、HEAD等,必须用大写字母)+请求URL(指向资源的位置)+协议版本(HTTP的版本,我所遵循的协议版本是什么)
首部:名:值
(空行)
实体的主体部分:(HTTP要传输的部分)

4)响应报文的格式
这里写图片描述
响应行:协议版本+状态码(说明请求期间发生了什么情况)+原因短语(对状态码进行一下解释)
首部:名:值
(空行)
实体的主体部分:(HTTP要传输的部分)

HTTP的工作流程
1)一次完整的HTTP事务是一个怎样的过程?
1.域名解析:客户端将域名发送给DNS,然后通过域名解析得到相应的IP地址,最后将IP地址返回给客户端。
2.TCP三次握手
3.发起HTTP请求
4.服务器相应HTTP请求
5.浏览器解析HTML代码并请求HTML代码中的资源
6.渲染

2)域名解析过程
这里写图片描述

HTTP1.0与1.1的区别
HTTP1.0规定浏览器与服务器只能保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开连接,服务器不跟踪每个客户也不记录过去的请求。显然,客户端和服务器每次建立和关闭连接都要进行三次握手+四次握手过程,这个过程很费时。

为了克服这个缺陷,HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了各种握手消耗的时间。

HTTP1.1还允许客户端不用等待上一次请求的结果,就可以发出下一次请求,但服务器必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次响应的内容,这样也显著的减少了整个下载过程的时间。

HTTP1.1增加个报文的头字段,身份认证,状态管理和Cache缓存机制相关的请求头和响应头。

持续更新中

0 0
原创粉丝点击