网络皮毛
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.TCP(20字节首部)、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.网络消息收发
每一层都去实现不同的功能,每一层的功能都以协议形式描述
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,是不是想哭,为啥之前不看看呢,瞄一眼就行了。