网络编程(一)

一、OSI七层协议:物数网传会表应

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

二、TCP/IP四层协议模型:

应用层(osi上三层):

协议有http协议(超文本传输协议)、ftp协议(文件传输协议)、nfs(网络挂载协议)、ssh(远程登录协议)

传输层:

TCP(传输控制协议)、UDP(用户数据报协议)

网络层:

IP(网间协议)、ICMP(网络控制协议)、IGMP(网络组管理协议)

物理与网络接口层(物理层和数据链路层):

以太网协议、ARP(地址解析协议)、RARP(反向地址转换协议)

三、字节序

大端字节序(网络字节序):高位地址存低位数据

小端字节序(本机字节序):低位地址存低位数据

int a = 0x12345678;
char b = a;
if(b == 0x78)
{
    printf("小端");
}

 四、封包与解包的过程

五、三次握手

 

流程:

1、握手前服务器必须处于listen状态

2、第一个握手包由客户端发往服务器,此包为请求包,发完后客户端处于SYN_SEND状态

3、服务器收到客户端第一个握手包后,发送第二个握手包,此包既为确认包也是请求包,发送完成后服务器处于SYN_RECV状态

4、客户端收到服务器回包后,确认数据正常后发送第三个握手包,此包为确认包,发送完成后客户端处于ESTABLISHED状态

5、服务器收到最后一个确认包后确认数据无误后状态变更为ESTABLISHED

为什么是三次?

1、握手的目的在于客户端与服务器双方都能确认双方的收发数据包都正常

2、服务器第一个握手包收到后便能确认客户端的发送功能与服务器的接收功能正常

3、客户端收到第二个握手包后,已经能确认出双方收发都没有问题,但此时服务器并不知道自己发送是否正常,客户端能否正常收到数据包

4、服务器收到第三个握手包时才能确认自己的发送功能与客户端接收功能正常 

5、三个数据包才能确认双方都能正常发送与接收数据,两个不够,而四个会冗余,降低性能

六、四次挥手 

 在挥手中,请求断开的可以是服务器也可以是客户端,但往往都是客户端主动断开连接

为什么握手三次 挥手四次?

握手时,服务端收到客户端发来的握手请求后,将自己的握手请求与应答包合并起来发送,而在挥手时,被动方收到FIN报文时,可能不会立即关闭SOCKET,也许还有其他消息没有处理完,故先回复一个ACK应答包,等待自己所有数据处理完后才会发送自己的FIN包

为什么主动方最后还需要经历TIME_WAIT状态才会关闭?

TIME_WAIT状态需要经过2MSL(两倍的最大报文段生存时间)才会回到CLOSE状态,由于网络本身不可靠,挥手最后一个ACK应答包可能会丢失,假设这个包丢失后,被动方会再次发送一个FIN挥手请求包,此时如果主动方已经关闭连接,则被动方会认为连接出错。

七、补充

1.TCP如何做到的可靠传输

数据包里有序列号、校验位、确认序列号

出错重传机制,三次握手、四次挥手

2.如何使用UDP可靠传输

自己封装应用层协议

序列号、md5值(校验位),要求对方收到数据后要回确认包

TCP功能完善,UDP可扩展性强,可以自己添加功能

3.TCP长连接和短连接

部分防火墙,杀死长期没有数据交换的连接

心跳包解决短连接,对方异常掉线的问题。每隔一段时间发送一个数据包。

连续三个心跳包没有回复,就可以认为对方掉线。

4.UDP通信异常断网怎么解决

1.心跳包

2.TCP通信 长连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值