文章目录

  • 网络基础
    • OSI七层网络模型
  • TCP/UDP
    • TCP协议的3次握手与4次挥手过程详解
    • TCP三次握手过程,为什么需要三次?
    • 为什么TCP建立连接需要三次握手,而断开连接需要四次挥手?
    • TIME_WAIT的意义,为什么等于2MSL?
    • TCP头部校验的原理,安全吗,可以仿造吗
    • TCP、UDP的区别?服务器和客户端建立的过程?
    • UDP编程的服务器端一般步骤
    • UDP编程的客户端一般步骤是
    • TCP编程的服务器端一般步骤是
    • TCP编程的客户端一般步骤是
    • 长连接与短连接
    • socket中的close是一次就关闭的吗?半关闭状态是怎么产生的?
    • 解决TIME_WAIT过多造成的问题
    • 解决TIME_WAIT过多造成的问题
    • TCP拥塞控制和流量控制
    • TCP流量控制,采用滑动窗口会用什么问题?
    • 拥塞控制和流量控制的区别?
    • TCP怎么保证可靠性?
    • TCP滑动窗口协议
    • TCPUDP 常见的错误码
    • http协议与TCP协议的联系
  • http
    • http/1.0和http/1.1的区别?
    • http四个会话过程?
    • 通过HTTP网络请求过程中的TCP协议
    • 一个机器能使用的端口号上限是多少?为什么?可以改变吗?如果想要用的端口超过这个限制怎么办?
    • 对称加密和非对称加密
    • RSA加密算法,MD5原理
    • 服务器攻击(DDos攻击)
  • socket
    • epoll和select的区别,epoll两种触发方式,踩过那些坑

网络基础

OSI七层网络模型

OSI为(Open System interconnect)开放系统互连参考模型的缩写,自上而下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
《OSI七层模型与TCP/IP五层模型》

TCP/UDP

TCP协议的3次握手与4次挥手过程详解

《TCP协议的3次握手与4次挥手过程详解》

TCP三次握手过程,为什么需要三次?

谢希仁版《计算机网络》中的例子:
"已失效的连接请求报文段”的产生在这样一种情况下:
client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。
本来这是一个早已失效的报文段,但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。
于是就向client发出确认报文段,同意建立连接。

假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。
由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。
这样,server的很多资源就白白浪费掉了。
采用“三次握手”的办法可以防止上述现象发生。
例如刚才那种情况,client不会向server的确认发出确认,server由于收不到确认,就知道client并没有要求建立连接。”
这个例子很清晰的阐释了“三次握手”对于建立可靠连接的意义。

其实就是为了保护服务器资源
简单来讲:A:喂,听到吗? B:能听到,你呢?A:…B:…
需要三次的原因:为了保护服务器资源,防止已失效的报文段出现在本连接中。

为什么TCP建立连接需要三次握手,而断开连接需要四次挥手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

TIME_WAIT的意义,为什么等于2MSL?

因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时候,来自连接先前化身的重复分组已经在网络中消逝。
MSL是最长报文段寿命,设置的目的是:
保证A发送的最后一个ACK能够到达B
防止已失效的报文段出现在新连接中
等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。
MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

TCP头部校验的原理,安全吗,可以仿造吗

TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。
可以仿造。

TCP、UDP的区别?服务器和客户端建立的过程?

TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能顺序地从一端传到另一端。
UDP—用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,不保证数据按顺序传递,故而传输速度很快。

UDP编程的服务器端一般步骤

创建一个socket,用函数socket();
设置socket属性,用函数setsockopt();* 可选
绑定IP地址、端口等信息到socket上,用函数bind();
循环接收数据,用函数recvfrom();
关闭网络连接;

UDP编程的客户端一般步骤是

创建一个socket,用函数socket();
设置socket属性,用函数setsockopt();* 可选
绑定IP地址、端口等信息到socket上,用函数bind();* 可选
设置对方的IP地址和端口等属性;
发送数据,用函数sendto();
关闭网络连接;

TCP编程的服务器端一般步骤是

创建一个socket,用函数socket();
设置socket属性,用函数setsockopt(); * 可选
绑定IP地址、端口等信息到socket上,用函数bind();
开启监听,用函数listen();
接收客户端上来的连接,用函数accept();
收发数据,用函数send()和recv(),或者read()和write();
关闭网络连接;
关闭监听.

TCP编程的客户端一般步骤是

创建一个socket,用函数socket();
设置socket属性,用函数setsockopt();* 可选
绑定IP地址、端口等信息到socket上,用函数bind();* 可选
设置要连接的对方的IP地址和端口等属性;
连接服务器,用函数connect();
收发数据,用函数send()和recv(),或者read()和write();
关闭网络连接.

长连接与短连接

答:(1)就是TCP长连接和TCP短连接:

①TCP长连接:TCP长连接指建立连接后保持连接而不断开。若一段时间内没有数据传输,服务器会发送心跳包给客户端,判断客户端是否还在线,叫做TCP长连接中的keep alive。一般步骤:连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;

②TCP短连接:指连接建立并传输数据完成后,就断开连接。一般步骤:连接→数据传输→关闭连接;

③使用场景:长连接适合单对单通信且连接数不太多的情况;短连接适合连接数多且经常更换连接对象的;

(2)HTTP是什么连接:

①在HTTP/1.0中,默认使用的是短连接。但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:

Connection:keep-alive
注意:此处的keep-alive和上述TCP长连接原理介绍中的keep alive不是一个意思:此处表示告知服务器本http请求是长连接模式,而TCP长连接中的keep alive表示对客户端的保活检测。
②http长连接并不是一直保持连接

http的长连接也不会是永久保持连接,它有一个保持时间如20s(从上一次数据传输完成开始计时),可以在不同的服务器软件(如Apache)中设定这个时间,若超过该时间限制仍然无数据通信传输,服务器就主动关闭该连接。注:实现长连接要客户端和服务端都支持长连接。

③http连接实质:http的长连接/短连接实质上就是TCP的长/短连接。

socket中的close是一次就关闭的吗?半关闭状态是怎么产生的?

不是,当A发送给B控制FIN的时候,A到B这个方向的连接就关闭了,这个时候处于半关闭的状态,但是B到A这个方向的连接并没有关闭,因为B要等到将数据全部发送完毕之后才会发送FIN给A。

解决TIME_WAIT过多造成的问题

《解决TIME_WAIT过多造成的问题》

解决TIME_WAIT过多造成的问题

《解决TIME_WAIT过多造成的问题》

TCP拥塞控制和流量控制

拥塞控制的几种方法
慢开始 拥塞避免 快重传 快恢复
《详解TCP中的拥塞控制》
《流量控制和拥塞控制》

TCP流量控制,采用滑动窗口会用什么问题?

流量控制是为了让发送方的发送速率不要太快,要让接收方来得及接收。
Nagle算法:①当发送方首都哦啊哦对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到到达的数据进行缓存。②当到达的数据已达到发送窗口大小的一半或已达到报文段的长度的时候就立即发送一个报文段。
糊涂窗口综合征:就是由于发送端和接收端上的处理不一致,导致网络上产生很多的小包,结果报文段包含了一个大大的头部,携带数据很少。数据传输效率低。处理方法是等待窗口大小满足一定的条件之后(能够接收一个最大报文,或者缓冲区的一半),再来发送窗口通告,这样就不会产生小报文。
滑动窗口机制为端到端设备间的数据传输提供了可靠的流量控制机制。然而,它只能在源端设备和目的端设备起作用,当网络中间设备(例如路由器等)发生拥塞时,滑动窗口机制将不起作用。

拥塞控制和流量控制的区别?

拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不会过载
流量控制往往是点对点通信量的控制,是一个端到端的问题,流量控制要做的是抑制发送端发送数据的速率,以便接收端来得及接收。

TCP怎么保证可靠性?

应用数据被分割成TCP认为最适合发送的数据块
超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段
TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层
校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段
TCP的接收端会丢弃重复的数据
流量控制:让发送方的发送速率不要太快,要让接收方来得及接收
拥塞控制:当网络拥塞时,减少数据的发送

TCP滑动窗口协议

“窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”
“滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”

TCPUDP 常见的错误码

《TCPUDP 常见的错误码》

http协议与TCP协议的联系

TCP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。

http

http/1.0和http/1.1的区别?

http1.1提供永久性连接,即1.0使用非持久连接
http1.1增加host头
http1.1还提供了身份认证,状态管理和cache缓存机制等相关的请求头和响应头。

http四个会话过程?

建立tcp连接
发出请求文档
发出响应文档
释放tcp连接
网页解析的过程

通过HTTP网络请求过程中的TCP协议

《通过HTTP网络请求过程中的TCP协议》
《看完这篇HTTP,跟面试官扯皮就没问题了》

一个机器能使用的端口号上限是多少?为什么?可以改变吗?如果想要用的端口超过这个限制怎么办?

端口号最多是65535个,端口号2个字节,16位,所以最大表示65535.不能改变

对称加密和非对称加密

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

RSA加密算法,MD5原理

服务器攻击(DDos攻击)

socket

epoll和select的区别,epoll两种触发方式,踩过那些坑

《select, poll epoll 的区别》
《epoll 和 select 的区别》

网络通信技术(TCP/IP)相关推荐

  1. java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计

    [JAVA 网络编程 TCP/IP.Socket 和协议设计] TCP/IP 协议简介 IP 首先我们看 IP(Internet Protocol)协议.IP 协议提供了主机和主机间的通信. 为了完成 ...

  2. WinSock API网络编程——TCP/IP协议详解

     WinSock API网络编程--TCP/IP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_tcp)            ...

  3. 网络编程-TCP/IP协议栈-TCP协议

    TCP协议 TCP协议作用 TCP协议位于协议栈的传输层.当应用层向TCP层发送用于网间传输的,用8字节表示的数据流,TCP则吧数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受到改计算机连 ...

  4. 网络编程-TCP/IP协议栈-IP协议

    协议 协议就是约定的一种规则,例如扑克游戏中约定好的各种规则,2<3<4<5<-等,以此作为游戏规则.当所有人都遵循这个规则,那么久可以不需要任何多余的交流就可以进行游戏,这个 ...

  5. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明: 一.OSI七层网络协议 OSI是Open System I ...

  6. OSI七层网络、TCP/IP五层网络架构、二层/三层网络

    一.OSI七层网络协议 OSI是Open System Interconnect的缩写,意为开放式系统互联. OSI参考模型各个层次的划分遵循下列原则: 1)根据不同层次的抽象分层 2)每层应当有一个 ...

  7. 网络基础 TCP/IP协议面试常问知识点

    网络基础 TCP/IP协议面试常问知识点 ****************** 如有侵权请提示删除 ********************* 1.网络包的组成: 报头/起始帧分界符--MAC头部-- ...

  8. Java中的网络和TCP/IP协议

    网络和TCP/IP协议 一.网络通信协议 1.1 协议和七层模型 1.2 TCP/IP协议 二.网络通信的实现 2.1 TCP协议通信 2.2 UDP协议通信 前言: 有时候我们会不理解,我们在QQ上 ...

  9. QT入门第七天 网络编程TCP/IP/UDP+Http和JSON解析+qt事件软键盘【CSDN最详细】

    网络编程+Http和JSON解析+qt事件软键盘 第一章 QT中的网络编程 [1]涉及到的类 [2]tcp协议的流程 [2.1]服务器的流程 socket-->bind-->listen- ...

最新文章

  1. tiav15安装重启_西门子博途TIA Portal V15.1安装无限重启和.net3.5SP1错误处理
  2. 昨天又帮爸DIY了一台工作电脑
  3. [转载]TFS测试管理
  4. 【运维】使用FC命令辅助查杀DLL木马
  5. 大多数日志文件的后缀名是_编程小短文:find,让你随心所欲查找整块磁盘的任意文件...
  6. Jquery的DOM
  7. 基于Docker快速搭建ELK
  8. NB-IoT终端进网检测介绍
  9. 微信看一下!搜狐张朝阳官宣狐友APP重新上架
  10. mac下编译curl库(处理https的问题)
  11. 20172310 《程序设计与数据结构》实验二报告
  12. 430单片机实现三人投票表决器_基于单片机的五人表决器的设计
  13. C语言练习题:输入一行字符,统计其中的英文字符、数字字符、空格和其他字符的个数。
  14. android 谷歌室内定位,打造室内导航 谷歌发布WifiRttScan App测试室内定位
  15. 输入一段字符串,记录当中有多少数字,大写字母,小写字母
  16. python数字信号处理应用pdf艾伦唐尼_Python数字信号处理应用
  17. nginx日志格式和常用日志变量
  18. 万字长文看懂商业智能(BI)|推荐收藏
  19. 如何换ionic里面的图标
  20. runtime错误c语言,c,runtime_为什么这样的代码会出现RUNTIME ERROR?,c,runtime - phpStudy...

热门文章

  1. No module named 'torchvision.ops'的解决办法
  2. struts2最近量产漏洞分析
  3. Unity——用代码实现序列帧动画
  4. 光格科技将于12月6日上会:拟募资6亿元,姜明武为实控人
  5. 梦幻手游服务器维护摆摊公示时间,梦幻西游手游摆摊交易优化 11号维护安卓多区合服...
  6. 游综宅2021最新天下布魔下载渠道 Tenkafu MA下载官网地址
  7. webpack中的style-resources-loader加载全局css变量
  8. 互联网大厂的年终奖(华为分红400亿,腾讯每人发股票 )
  9. ThinkPHP 关闭调试模式
  10. PS图片无法保存ICO格式解决方法