网络编程2

延迟应答

提高传输效率的机制,又是基于流量控制,来引入的提高效率的机制,把应答的时间往后拖一点,趁着这个时间来把欠的债补上一波

捎带应答

基于延迟应答的基础上引入的,典型的通信模型,一发一收

TCP中,只要把数据传过去,对方收到后,就会立刻由内核返回一个ACK确认报文,另外,响应数据,由应用程序里负责传输。

这俩操作是不同的时机传输的,因此不能把这两传输合并起来,但是因为有个延时应答,本来ACK需要立刻返回,结果延时应答导致稍等返回,此时业务上也需要返回这个响应,两个报文因此合二为一了。  但是两个操作合成一个的情况不是100%产生的

面向字节流

存在一个经典问题:粘包问题

例如接收到了 :好123

不确定完整响应是”好“ 还是”好123“

TCP自身对于应用数据报是无法区分的

UDP面向数据报。不存在这个问题,因为一个数据报对应一个应用层报文

只需要定义应用层数据协议的时候,明确包和包之间的边界就可以了。

可以通过分隔符,比如约定使用来作为包的结束标记(例如使用”;“符号来隔开)、

还可以通过指定包的长度,比如数据包开头位置指定长度。

TCP中的异常处理

连接异常

a.程序崩溃

相当于是进程的异常退出,操作系统会回收进程的资源,包括释放文件描述表,而这样的释放操作就相当于调用了对应socket的close,执行close就会触发fin报文,进一步开始四次挥手

b.正常关机(通过开始菜单这种方式来关闭主机)

关机的时候,系统会先强制结束所有的用户进程,和程序崩溃一样,进行文件描述符的释放操作后进一步开始四次挥手

c.主机掉电

掉电的是接收方,发送方不知道对面挂了,继续发送数据,发的数据没有ACK了,发送方触发超时重传,重传几次后仍然无应答,尝试重置链接(复位报文段),最后失败,放弃连接

掉线的是发送方,接收方没有收到后过了一段时间,会发送一个心跳包,心跳包是周期性触发的,只是一格简单的不携带任何业务数据的包,存在的意义就是确认一下对方是否还在,如果对方不返回心跳包,说明心跳遗失,说明对方挂了,此时也就放弃链接

IP地址具体规则

IP地址由两个部分组成,网络号和主机号,网络号是标识网段,保证相互连接的两个网段具有不同的标识,主机号是标识主机,同一网段内,主机号之间具有相同的网络号,但是必须有不同的主机号。

同一个局域网中,主机之间的网络号是相同的,主机号必须是不同的,在两个相邻的局域网中,要求网络号是不同的(同一个路由器连接的局域网)也就是WAN口和LAN口得有不同的网络号

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值