计算机网络、网络编程笔记

计算机自定向下笔记:https://gy23333.github.io/2020/03/16/%E3%80%8A%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E8%87%AA%E9%A1%B6%E5%90%91%E4%B8%8B%E6%96%B9%E6%B3%95%E3%80%8B%E7%AC%94%E8%AE%B0/
1.TCP字节流服务和UDP数据报服务的区别
1)表现形式:通信双方是否执行相同次数的读、写操作;
2)具体区别:
字节流:
发送端应用程序执行多次写操作时,TCP模块先将这些数据放入TCP发送缓冲区中。当TCP模块真正开始发送时,发送缓冲区的数据被封装成一个或多个TCP报文段发出。因此,TCP模块发出的TCO报文段个数和应用程序执行的写操作次数没有固定的数量关系;

接收端类似,TCP模块将接受到的报文携带的应用程序数据按照TCP报文段序号依次放入接受缓存区,通知应用程序读取数据,应用程序依据用户指定的应用程序读缓存区大小,分一次或多次读取缓存区。因此,读操作次数和接受到的报文段也没有固定数量关系。

发送端执行的写操作次数和接收端执行的读操作次数没有任何数量关系,这就是字节流的概念:应用程序对数据的发送和接受没有边界限制。

UDP则不然,一次写操作,发送一个UDP数据报,接受端必须及时针对每一个UDP数据报执行读操作,否则丢包。

2.错误检查
错误检查方法:
1)用专门的包装函数代替原api
2)在每次函数调用下面加上一个assert()宏
比如:
ret=listen(sock,5);
assert(ret!=-1);

3.“同步”与“异步”
在I/O模型中,“同步”和“异步”区分的是内核向应用程序通知的是何种I/O事件(是就绪事件还是完成事件),以及该由谁来完成I/O读写(是应用程序还是内核),同步都是前者,异步都是后者。

在并发模式中,“同步”指的是程序完全按照代码序列的顺序执行;“异步”指的是程序的执行需要由系统事件来驱动。常见的系统事件包括中断、信号等。

4.阻塞与非阻塞
阻塞非阻塞: 请求不能立即得到应答,需要等待,那就是阻塞;否则可以理解为非阻塞。
在这里插入图片描述在这里插入图片描述

6.I/O复用函数中可写意味着socket写缓冲区有足够空间可写入。
一般只有在write一次没有写完,写缓冲区不够时需要注册POLLOUT/EPOLLOUT,等待socket缓冲区中的数据被对方接收之后,写缓冲区就会有空闲空间可以继续write。
查看tcp缓冲区大小:
读缓冲区:/proc/sys/net/ipv4/tcp_rmem
该文件包含3个整数值,分别是:min,default,max
写缓冲区:/proc/sys/net/ipv4/tcp_wmem
该文件包含3个整数值,分别是:min,default,max

7.epoll的LT(电平触发)和ET(边沿触发)
LT支持阻塞或非阻塞文件描述符,E

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值