Linux网络编程

关注点:

1.TCP的服务端和客户端,不涉及用户界面;粗略涉及udp,以及udp和tcp的巨大区别,特别再处理并发时候是完全不同的;强调可以测量的性能。
2.避免猜想的优化
错误的认为网络编程尽量避免动态内存分配,杜绝使用STL,但是linux内
核把从网卡收到一个包,传给应用程序的过程涉及到很多内存分配和释放。

网络方面的以太网分层

1. 以太网层(帧)

2. IP层(分组)

注意ip分组和分片的区别

3. TCP层(分节)

3. 应用层(消息)

网络编程几个注意的地方

1. 不要把网络IO和业务逻辑混合在一起

2. 部分人认为TCP不可靠,收到的数据不完整

3. TCP是字节流协议,保证字节按顺序到达,但不保留消息的边界,需要设计TCP分包的逻辑

4. 直接发送C语言的结构体

  1. 需要考虑结构体的对其,如可以把对齐设为1,但是直接导致第三方lib core dump,因为破坏了API二进制接口
  2. 高度的不可扩展,如果增加一个字段就会导致客户端和服务端都得重写

5. TCP的自连接:

TCP的客户端往本机的服务端发起连接的时候,如果本机的服务端没有起来,在一定的条件下,客户端会自己和自己建立连接,如localhost:54321<–>localhost:54321,出现自己发数据,自己收到的现象

6.验证以太网有效带宽

nc命令详解.
dd命令详解
远程拷贝文件
从server1拷贝文件到server2上。需要先在server2的1234端口上,用nc激活监听。

[root@server2 ~]# nc -l 5001 > /dev/null  
这表示监听server2的5001端口,把收到的数据放入黑洞中

server1: 
[root@server1 ~]# dd if=/dev/zero bs=1MB cout=1000 | nc e6400的ip 5001
将本机/dev/zero上的数据,以1000块,每块为1MB的数据发送到e6400这台机器上

把磁盘上得数据发送到本机(从磁盘上读数据不一定比从/zero 上慢)
time命令

server1: 
[root@server1 ~]# time nc localhost 5001  <  aaa.txt

监控接收数据的进度
pv命令

[root@server2 ~]# nc -l 5001 | pv -w > /dev/null  
这表示监听server2的5001端口同时显示接收的进度,把收到的数据放入黑洞中
pv单位用的是二进制的M,dd用的是十进制的

server1: 
[root@server1 ~]# dd if=/dev/zero bs=1MB cout=1000 | nc e6400的ip 5001
将本机/dev/zero上的数据,以1000块,每块为1MB的数据发送到e6400这台机器上 

如果在一台机器上测试,速度可能会下降,因为一台机器上开了 nc pv dd nc这四个进程,会争用CPU造成速度下降

简单的解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值