tcp/ip面试题
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不管网络是否拥堵。
TCP是连接的,所以服务是一对一服务,而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采用持续连接。所谓持续连接就是服务器在发送响应后仍然在一段时间内保持这条连接。使得后序的请求和响应报文都在这条连接上进行
tcp/ip面试题的更多相关文章
- TCP/IP 相关知识点与面试题集
第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...
- 面试题常考&必考之--http访问一个页面的全流程(Tcp/IP协议)
分析:-http访问一个页面的全流程,也就好比我们在地址栏输入地址,然后点击回车进行访问 该面试题的主要考点是:计算机网络的TCP/IP协议栈 描述图片:首先应用层提交http请求,传到传输层后由,T ...
- TCP/IP协议三次握手与四次握手流程解析
原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...
- 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)
前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...
- TCP/IP协议 三次握手与四次挥手
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号 ...
- TCP/IP协议 三次握手与四次挥手【转】
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号 ...
- TCP/IP协议三次握手与四次握手流程解析(转载及总结)
原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详 ...
- TCP/IP协议全解析 三次握手与四次挥手[转]
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立.所谓四次挥手(Four-Way Wavehand) ...
- 【网络】TCP/IP连接三次握手
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
随机推荐
- 用hugo建博客的记录 · 老张不服老
前后累计折腾近6个小时,总算把搭建hugo静态博客的整个过程搞清楚了.为什么用了这么久?主要还是想偷懒,不喜欢读英文说明.那就用中文记录一下过程吧.还是中文顺眼啊. 某日发现自己有展示些东西给外网的需 ...
- springboot java web开发工程师效率
基础好工具 idea iterm2 和 oh-my-zsh git 热加载 java web项目每次重启时间成本太大. 编程有一个过程很重要, 就是试验, 在一次次试验中探索, 积累素材优化调整程序模 ...
- ElasticSearch系列四 CURD
1: ES 类似JPA操作 1.1 编写实体类 1.2 编写映射文件 xxx.json 1.3编写repository继承 ElasticSearchrepository 1.4 编写admin 的C ...
- dubbo与trivial超时机制的深入思考
说在前面 trivial是根据之前设计的RPC框架而来的(还在增进当中),其中较为不同的一个点为,在客户端去掉了业务线程池,因为既然都要等待,不必要再加一层. 进入正题 有在网上看到这样的信息,“之前 ...
- symfony 5.05 dev安装为了更好的迭代更新
我的项目目录 安装命令 composer create-project symfony/website-skeleton:^5.0.x-dev manage 数据查询测试输出
- VM安装Linux Centos7.0虚拟机
一.准备工作 1.安装VMware 官网https://www.vmware.com/cn.html 2.准备centos7的镜像文件 官网下载链接:http://isoredirect.centos ...
- 一起了解 .Net Foundation 项目 No.10
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. LLILC LLILC ( ...
- c语言之单向链表
0x00 什么是链表 链表可以说是一种最为基础的数据结构了,而单向链表更是基础中的基础.链表是由一组元素以特定的顺序组合或链接在一起的,不同元素之间在逻辑上相邻,但是在物理上并不一定相邻.在维护一组数 ...
- C#编程_单线程IP地址解析
单线程IP地址解析 目标程序 界面如下图 设计方法:完成单个IP地址解析,循环调用方法,完成扫描. 注意用stopwatch计算时间. 实现思路 先知道怎么解析一个单个的IP地址. 用循环的方法解 ...
- Vmware安装的linux系统开机黑屏,关闭显示虚拟机忙怎么怎么解决?
在vm虚拟机中,可能会遇到打开一台主机直接黑屏,而且无法关闭,关闭会显示虚拟机繁忙这种情况,如下图: 一般是因为没有正常关机或者操作不当导致的 对此,解决办法一般有两种 第一种方法: 1.重启电脑 ...