【转】Socket 缓冲区以及阻塞模式

socket缓冲区

每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。

write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。

Read more   2020/9/1 posted in  网络基础

从物理层到MAC层(数据链路层)

集线器可以将多台电脑连接,但是其采用的是广播的方式,所有的电脑都能收到包。

这里列出三个问题(都是数据链路层要解决的问题):

  1. 这个包是发给谁的?谁应该接收?
  2. 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
  3. 如果发送的时候出现了错误,怎么办?

Read more   2018/7/24 posted in  网络基础

DHCP和PXE

只要是在网络上跑的包,都是完整的,可以有下层没有上层,绝对不可能有上层没有下层。

当两个IP地址企图进行通讯的时候, Linux首先会判断,两个网段是否同一个,或者和我的一个网卡地址是同一个网段。只有是一个网段的,它才会发送ARP请求,获取MAC地址。
如果发现不是, Linux不会直接将包发送到网上,而是企图将包发送到网关

Read more   2018/7/13 posted in  网络基础

查看IP地址命令: `ip addr`

root@test:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff
    inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fec7:7975/64 scope link 
       valid_lft forever preferred_lft forever
Read more   2018/7/12 posted in  网络基础