zoukankan      html  css  js  c++  java
  • TCP-IP协议学习笔记

    TCP-IP协议学习笔记

    描述符

    socket的返回值是一个描述符,它具有其他Unix描述符的所有特性:可以用这个描述符调用read和write;可以用dup复制它,在调用了fork后,父进程和子进程可以共享它;可以调用fcntl来改变它的属性,可以调用close来关闭它,等等。

    mbuf

    mbuf的主要用途是保存在进程和网络接口间互相传递的用户数据。 但mbuf也用于保存其他各种数据:源与目标地址、插口选项等等。

    四种不同类型的mbuf,它们依据在成员mflags中填写的不同标志MPKTHDR和MEXT而不同。

    如果mflags等于0,mbuf只包含数据。在mbuf中有108字节的数据空间(mdat数组)。 指针mdata指向这108字节缓存中的某个位置。 我们所示的mdata指向缓存的起始,但它能指向缓存中的任意位置。 成员mlen指示了从mdata开始的数据的字节数。

    第二类mbuf的mflags值是MPKTHDR,它指示这是一个分组首部,描述一个分组数据的第一个mbuf。 数据仍然保存在这个mbuf中,但是由于分组首部占用了8字节,只有100字节的数据可存储在这个mbuf中(在mpktdat数组中)。

    Net/3

    Net/3接口层试图在网络协议和连接到一个系统的网络设备的驱动器间提供一个与硬件无关的编程接口。这个接口层为所有的设备提供以下支持:

    • 一套精心定义的接口函数;
    • 一套标准的统计与控制标志;
    • 一个与设备无关的存储协议地址的方法;
    • 一个标准的输出分组的排队方法。

    SSNBIO和SSASYNC标志

    对一个插口发read系统调用,如果当前没有网络上来的数据,则read系统调用就会被阻塞。同样,当一个进程调用write系统调用时,如果内核中没有缓存来存储发送的数据,则内核将阻塞进程。如果设置了SSNBIO,在对插口执行I/O操作且请求的资源不能得到时,内核并不阻塞进程,而是返回EWOULDBLOCK。

    如果设置了SS_ASYNC,当因为下列情况之一而使插口状态发生变化时,内核发送SIGIO信号给sopgid标识的进程或进程组:
    连接请求已完成;

    • 断连请求已被启动;
    • 断连请求已完成;
    • 连接的一个通道已被关闭;
    • 插口上有数据到达;
    • 数据已被发送(即,输出缓存中有闲置空间);
    • UDP或TCP插口上出现了一个异步差错。

    系统调用

    当我们用“系统调用”这个词时,我们指的是被syscall调用的内核中的函数,而不是应用调用的进程中的函数。

    syscall期望系统调用函数(即sycall指向的函数)在没有差错时返回0,否则返回非0的差错代码。

    插口I/O

    插口层的核心是两个函数: sosend和soreceive。这两个函数负责处理所有插口层和协议层之间的I/O操作。

  • 相关阅读:
    php jquery pjax示例源码 (ajax请求,并改变url)
    mysql 中查看指定表的字段名 (可根据字段变量生成c#后台代码)
    原生js Ajax
    ajax basic 认证
    Json序列化问题
    MSSQL 日期操作函数 总结
    用sql语句按周、按月、按季、按年统
    mssql中得到当天数据的语句
    SP_CreateInsertScript 将表内的数据全部拼接成INSERT字符串输出
    MSSQL 获取指定日期所在星期的第一天和最后一天日期 获取指定日期坐在月的第一天和最后一天
  • 原文地址:https://www.cnblogs.com/linyihan/p/5566759.html
Copyright © 2011-2022 走看看