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状态,等待服务器确 ...
随机推荐
- 如何安装及使用honmaple社区程序 · honmaple's blog · 风落花语风落天,花落风雨花落田.
Table of Contents 1. 如何安装及使用 1.1. 安装需要的package 1.2. 配置config 1.3. 注释下面代码 1.4. 初始化数据库 1.5. 创建管理员账户 2. ...
- C++走向远洋——38(用对象数组操作长方柱类)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:changfangzhu.cpp * 作者:常轩 * 微信公众号 ...
- USB小白学习之路(3) 通过自定义请求存取外部RAM
通过自定义请求存取外部RAM 1. 实验简述 此实验是对自定义的供应商特殊命令(vendor specific command bRequest = 0xA3)进行解析,程序中的read me说明如下 ...
- scrapy爬虫-scrapy-redis分布式
1.如何将一个scrapy爬虫项目修改成为一个简单的分布式爬虫项目 官方文档:https://scrapy-redis.readthedocs.io/en/stable/ 只用修改scrapy项目的两 ...
- sofa-bolt源码阅读(1)-服务端的启动
Bolt服务器的核心类是RpcServer,启动的时候调用父类AbstractRemotingServer的startup方法. com.alipay.remoting.AbstractRemotin ...
- 黑客必学之“网页木马webshell”
摘要: 这节课,我们来了解一下网页的木马,首先我们了解网页木马之前,先来了解一下什么是一句话木马.小马和大马.什么是webshell首先简单说一下webshell,webshell简单来说就是黑客植入 ...
- LeetCode--二叉树1--树的遍历
LeetCode--二叉树1--树的遍历 一 深度遍历 深度遍历里面由 三种遍历方式,两种实现方法.都要熟练掌握. 值得注意的是,当你删除树中的节点时,删除过程将按照后序遍历的顺序进行. 也就是说,当 ...
- Docker Compose 项目打包部署
Docker Compose 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架构的应用系统一 ...
- jsvascript篮球梦
首先让我们先欣赏一下效果图: html文本: <div class="box"> <img id="imgshow" src="la ...
- input type="file"使用
问题: 在实际开发过程中,会遇到上传文件的一些需求.但是使用原生的<input type="file" />在使用中存在一些问题 在未上传文件时,显示"no ...