TCPIP常见⾯试题
TCP协议
1.OSI与TCP/IP各层的结构和功能,协议和作⽤。
OSI七层模型对应TCP/IP四层模型,只是分法不同⽽已。
应⽤层:提供应⽤层服务,⽂件传输(FTP),电⼦邮件(SMTP), 主要的协议还有HTTP(超⽂本传输协议),DNS,和telnet
表⽰层:⽤于数据格式化,代码转换,数据加密,没有协议
会话层:解除或建⽴与别的接点的联系,没有协议
传输层:TCP UDP
⽹络层: IP ICMP(ping主要实现), OSPF(全局泛洪,主要⽤于IP选路)
数据链路层 ARP(地址解析协议,根据IP地址获得MAC地址)
物理层:
按照TCP/IP分的话,就四层,挺好记的,应⽤层,传输层,⽹络层还有不知道叫什么名字,主机到⽹络层?(包含物理层和数据链路层)
2.TCP和UDP有什么区别?
TCP是传输控制协议,提供的是⾯向连接的,可靠地字节流服务。实际数据传输之前服务器和客户端要进⾏三次握⼿,会话结束后结束连接。UDP是⽤户数据报协议,是⽆连接的。因为⽆连接,⽽且没有超时重发机制,所以UDP传输速度很快。主要⽤于视频传输(但其实现在各⼤视频商都是⽤HTTP
协议,⽽HTTP是基于TCP),实时视频。
TCP保证数据按序到达,提供流量控制和拥塞控制,在⽹络拥堵的时候会减慢发送字节数,⽽UDP不管⽹络是否拥堵。
tcpip协议pdfTCP是连接的,所以服务是⼀对⼀服务,⽽UDP可以1对1,也可以1对多(多播),也可以多对多。
3.TCP 的三次握⼿与四次挥⼿过程,各个状态名称与含义, TIMEWAIT 的作⽤。 TCP 的三次握⼿过程?为什么会采⽤三次握⼿,若采⽤⼆次握⼿可以吗?
假设A是客户端,B是服务端。A⾸先向B发出连接请求报⽂段,这个时候⾸部中的同步位SYN=1,同时选择⼀个初始的序号x。此时报⽂段不能携带数据。此时A进⼊到SYN_SENT(同步已发送)状态。
B受到连接请求报⽂,同意建⽴连接,向A发出确认。确认报⽂中,SYN和ACK都置1,确认号是x+1,与此同时,⾃⼰选择⼀个初始序号y,这个报⽂也不能携带数据。此时B进⼊SYN_RCVD(同步收到)状态。
A收到B的确认后,还要给B确认。这时可以携带数据,A进⼊到ESTABLISHED状态。这就是三次握⼿的过程。
那如果两次握⼿会怎么样呢?
就是A为什么还要发送⼀次确认。为了防⽌已经失效的连接请求报⽂⼜突然传送到了B,⽽产⽣错误。假设⼀种异常,A发出的请求由于⽹络阻塞没有及时到达B,后⼜重传请求,之后B响应了,且建⽴了连接,之后连接⼜释放了。此时假设A发出的第⼀个请求到达B,B误以为是A再次请求连接,B建⽴连接,
如果采⽤两次握⼿,此时连接建⽴,⽽A⼜不发送数据,浪费了B的资源。
TCP的四次挥⼿
数据传输结束后,通信双⽅都可以释放连接。现在A和B都处于ESTABLISHED状态,A的应⽤进程向其TCP发出连接释放报⽂段,主动关闭TCP连接。A进⼊FIN_WAIT1(终⽌等待1)状态。然后B确认,B进⼊CLOSE_WAIT(关闭等待)状态。此时TCP处于半关闭状
态,A已经没有数据要发送了,如果B仍要发送数据,B仍然接收。A收到B的确认后,就进⼊FIN_WAIT2(终⽌等待2)状态,等待B发出连接释放报⽂。 如果B已经没有向A发送的数据,则B发送请求释放报⽂,B进⼊LAST_ACK(最后确认)阶段,等待A的确认。A在收到B 的请求后,要发出确认,然后进⼊TIME_WAIT(时间等待)状态。此时,连接还未释放,必须等待时间等待计时器设定的时间的2MSL 后,A才进⼊CLOSED状态。
为什么最后要等⼀个TIME_WAIT时间呢?⼀:为了保证最后⼀个ACK能够到达B,防⽌丢失了,B重传,A不能回复确认。⼆是为了防⽌之前提到的“已经失效的连接请求报⽂段“出现在连接中”。A发送完最后⼀个ACK,再经过时间2MSL,可以使本连接产⽣的所有请求报⽂从⽹络中消失。
4.TCP拥塞控制
拥塞控制就是防⽌过多的数据注⼊到⽹络中,这样使得⽹络中的路由器或者链路不⾄于过载。TCP拥塞控制⽅法主要包括:慢开始,拥塞避免,快重传和快恢复。
慢开始是指发送⽅先设置cwnd=1,⼀次发送⼀个报⽂段,随后每经过⼀个传输轮次,拥塞串⼝cwnd就加倍,其实增长并不慢,以指数形式增长。还要设定⼀个慢开始门限,当cwnd>门限值,改⽤拥塞避免算法。拥塞避免算法使cwnd按线性规律缓慢增长。当⽹络发⽣延时,门限值减半,拥塞窗⼝执⾏慢开始算法。
之后⼜提出了快重传和快恢复
当接收⽅收到失序的报⽂段,按照快重传,需要尽快发送对未收到的报⽂段的重复确认。快恢复是指当拥塞串⼝达到门限值,不直接开启慢启动算法,⽽是快恢复,快恢复就是收到三个重复的确认(可看作是⽹络已经拥塞了),此时并不执⾏慢开始算法,⽽是执⾏快恢复,就是新的门限值是原来的⼀半,直接进⼊拥塞避免阶段。
5.滑动窗⼝协议和回退n针协议
发送⽅和接收⽅都维护⼀个数据帧序列,这个序列叫窗⼝。
发送⽅的窗⼝由接收⽅确定,⽬的在于控制发送速度,以免接受⽅缓存不够⼤,⽽导致溢出。这其实属于流量控制范畴。如图,接收⽅告诉发送⽅,建议滑动窗⼝为6,(否则太⼤⼀次发送太⼤,我接收缓冲区太⼩,处理不过来),然后发送⽅可以⼀次发送6个数据帧,假设已经发送了4,5,6,但是没收到关联的ACK,7,8,9则等待发送,如果此时发送端收到4号ACK,则窗⼝向右收缩,此时窗⼝就“滑动”了
滑动窗⼝协议是理论,可以⽤的是后退n针协议。发送⽅⼀次发送⽐如说10个帧,前两个针都返回了对应的ACK,数据帧2出现了错误,这时发送⽅被迫重新发送2-8这七个帧,这就是回退n帧协议。但是如果接收⽅已经接收到了3-8帧,只是丢失了2帧,全部重传太浪费⽹络条件了,所以有时候会选择重传丢失的的帧。这就是选择重传协议。
HTTP协议
HTTP报⽂结构
HTTP有两类报⽂:
1)请求报⽂
2)响应报⽂
HTTP的请求报⽂和响应报⽂由三个部分组成。
1)开始⾏。⽤于区分是请求报⽂还是响应报⽂。在请求报⽂中的开始⾏叫做请求⾏,在响应报⽂中的开始⾏叫做状态⾏
2)⾸部⾏,⽤于说明浏览器,服务器或报⽂主体的⼀些信息
3)实体主体
常见状态码和含义
状态码都是三位数字的,分为5⼤类共33种
1xx:表⽰通知消息,如请求收到了或者正在进⾏处理
2xx:表⽰成功,如接受或知道了
3xx:表⽰重定向,如要完成请求还要继续采取⾏动
4xx:表⽰客户的差错,如请求由错误的语法或不能完成
5xx:表⽰服务器差错
200:客户端请求成功
400:bad request 客户端请求错误
403:Forbidden 服务器收到请求,但是拒绝提供服务
404:Not found 请求资源不存在
500:Internal Server Error 服务器发⽣不可预期错误
503:服务器当前不能处理客户端请求
HTTP请求的⼏种类型
GET 请求读取由URL所标志的信息
HEAD 请求读取由URL所标志的信息的⾸部
POST 给服务器添加信息
PUT在指明的URL下存储⼀个⽂档
CONNECT ⽤于代理服务器
HTTP1.1和HTTP1.0的区别
HTTP1.0每请求⼀个⽂档就要建⽴TCP连接,有⼏次握⼿的时间花销,如果⼀个主页上有很多链接的对象需要依次进⾏连接,每次连接下载都要消耗这些开销。
HTTP1.1采⽤持续连接。所谓持续连接就是服务器在发送响应后仍然在⼀段时间内保持这条连接。使得后序的请求和响应报⽂都在这条连接上进⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论