网络皮毛

1.TCP链接采用二次握手会有什么问题

  三次握手是为了防止bai已失效的连接du请求再次传送到服zhi务器端。 二次握手不可行,因dao为:如果由于网络不稳定,虽然客户端以前发送的连接请求以到达服务方,但服务方的同意连接的应答未能到达客户端。则客户方要重新发送连接请求,若采用二次握手,服务方收到重传的请求连接后,会以为是新的请求,就会发送同意连接报文,并新开进程提供服务,这样会造成服务方资源的无谓浪费。

2.粘包、分包:

  1)TCP为了保证可靠传输,​​​尽量减少额外开销(每次发包都要验证),因此采用了流式传输,面向流的传输,相对

于面向消息的传输,可以减少发送包的数量,从而减少了额外开销。但是,对于数据传输频繁的程序来讲,使用TCP可能会容易粘包。当然,对接收端的程序来讲,如果机器负荷很重,也会在接收缓冲里粘包。这样,就需要接收端额外拆包,增加了工作量。因此,这个特别适合的是数据要求可靠传输,但是不需要太频繁传输的场合(两次操作间隔100ms,具体是由TCP等待发送间隔决定的,取决于内核中的socket的写法)

  2)UDP,由于面向的是消息传输,它把所有接收到的消息都挂接到缓冲区的接受队列中,因此,它对于数据的提取分离就更加方便,但是,它没有粘包机制,因此,当发送数据量较小的时候,就会发生数据包有效载荷较小的情况,也会增加多次发送的系统发送开销(系统调用,写硬件等)和接收开销。因此,应该最好设置一个比较合适的数据包的包长,来进行UDP数据的发送。(UDP最大载荷为1472,因此最好能每次传输接近这个数的数据量,这特别适合于视频,音频等大块数据的发送,同时,通过减少握手来保证流媒体的实时性)参考:https://www.cnblogs.com/kex1n/p/6502002.html

3.TCP20字节首部UDP8(字节首部)区别和使用场景

  UDP协议(数据包协议)的保护消息边界使得每一个消息都是独立的,在接收端要么接收不到数据要么就是接收一个完整的一段数据.而TCP流传输,却把数据当作一串数据流,他不认为数据是一个一个的消息.

  TCP无保护消息边界的解决针对这个问题,一般有3种解决方案:

  (1)发送固定长度的消息

  (2)把消息的尺寸与消息一块发送

  (3)使用特殊标记来区分消息间隔

4.请简述TCP与UDP的区别。

  TCP是基于连接的,UDP基于无连接的
  TCP对系统资源的要求多,UDP较少
  UDP程序结构较简单
  TCP是面向流数据的,UDP是数据报
  TCP保证数据正确性,UDP可能丢包。
  TCP保证数据的顺序,UDP不保证。

  1) TCP(Transmission Control Protocol)传输控制协议:一种面向连接的、可靠的、基于字节流的运输层通信协议,三次握手。
  2) UDP(User Datagram Protocol)用户数据报协议:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点。缺点是易丢失数据包。

5.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

  这是因为服务段的LISTEN状态下的SOCKET当收到SYN报文的建立请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你未必会马上关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发的。

6.长连接短链接

https://www.cnblogs.com/qq78292959/archive/2013/01/18/2866123.html

7.网络消息收发

这里先解释TCP/IP(四层) 以及OSI(七层)模型

 

每一层都去实现不同的功能,每一层的功能都以协议形式描述

OSI模型中每一层是隔离的,同时又是有联系的

OSI模型中每一层向相邻上层提供一套确定的服务

7.1物理层: 

  是参考模型中的最底层,主要定义了系统的电气、机械、过程和功能标准。如:电压、物理数据速率、最大传输距离、物理联接器和其他的类似特性。

  物理层的主要功能是利用传输介质为数据链路层提供物理联接,负责数据流的物理传输工作。物理层传输的基本单位是比特流,即0和1,也就是最基本的电信号或光信号,是最基本的物理传输特征。

7.2数据链路层:

传输的基本单位为“”,将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并为网络层提供差错控制流量控制服务。(如何提供差错控制和流量控制,后续会讲)

数据链路层由MAC(介质访问控制子层)和LLC(逻辑链路控制子层)组成。

介质访问控制子层的主要任务是规定如何在物理线路上传输帧。(和物理层相连)

数据链路控制子层主要负责逻辑上识别不同协议类型,并对其进行封装。也就是说数据链路控制子层会接受网络协议数据、分组的数据报并且添加更多的控制信息,从而把这个分组传送到它的目标设备。(和网络层对接)

7.3 网络层:

传输的基本单位为“数据包”,提供IP地址,负责把数据包从源网络传输到目标网络的路由选择工作。

7.4 传输层:

传输的基本单位为“”,提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。

7.5 会话层:

负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

7.6 表示层:

提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。

7.7 应用层:

OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。

TCP/IP模型同样采用了分层结构,层与层相对独立但是相互之间也具备非常密切的协作关系。

TCP/IP模型不关注底层物理介质,主要关注终端之间的逻辑数据流转发

TCP/IP模型的核心是网络层和传输层网络层解决网络之间的逻辑转发问题传输层保证源端到目的端之间的可靠传输

最上层的应用层通过各种协议向终端用户提供业务应用

实现

PC1的发送的消息经过应用层封装,这时的数据称为协议数据单元PDU;上一章提到了TCP/IP模型中每一层使用下层所提供的服务,因此,应用层封装好的数据传递给传输层处理;

传输层收到消息后添加UDP报文头或者TCP报文头,指定源端口号和目的端口号(后续会讲TCP/UDP报文头以及端口号),这时的数据称为数据段Segment,传输层封装好的数据传递给网络层处理;

网络层收到消息后添加IP报文头,指定源IP地址和目的IP地址(后续会讲IP报文头以及IP地址),这时的数据称为数据包Packet,网络层封装好的数据传递给数据链路层处理;

数据链路层收到消息后添加以太网数据帧报文头,指定源MAC地址和目MAC地址(后续会讲以太网报文头以及MAC地址),这时的数据称为数据帧Frame;数据链路层封装好的数据传递给物理层处理;

最后,帧被转换为比特流,通过网络介质传输到PC2。

 

大小端

之前总听人提起大小端,也没细研究,毕竟自己不封装网络。正好想到这里了,顺便了解一下。

 

1.大小端是不同的对于数据在内存地址中的存放方式,不同的处理器(平台)的数据存储方式是不同的。如果实现跨平台通信则大小端是不能忽视的问题。
大端模式:数据的高位存储在内存的低字节。ARM/PowerPC等处理器采用大端模式
小端模式:数据的地位存储在内存的低字节。Intel架构处理器采用小端模式。
如一个数据:0x12345678;对应内纯地址是0x00~0x03。
大端模式: 小端模式:
地址:0x00 0x01 0x02 0x03 地址:0x00 0x01 0x02 0x03
数据:0x12 0x34 0x56 0x78 数据:0x78 0x56 0x34 0x12

2.字节序对应着内存的存储(组织)模式,如网络字节序采用大端模式。

3.字节序只是对内置的数据类型而言(int、short、double、long....char)而对于char而言由于其本身只有一个字节则字节序和存储模式对其不影响。

4.单字节内纯中的比特为不受字节序的影响,大于1个字节的数据类型,字节序才对其有影响。
引申:网络通讯中字节序的影响。

就这么easy,是不是想哭,为啥之前不看看呢,瞄一眼就行了。

posted @ 2020-10-13 09:27  Elijah_j  阅读(76)  评论(0编辑  收藏  举报