zoukankan      html  css  js  c++  java
  • 【网络编程】TCPIP-小笔记集合


    前言

    主要记录TCPIP一些小笔记
    说明:

    • demo 基于 Linux。

    TCP/IP 网络编程笔记散集

    快速入门

    I/O 缓冲

    • I/O 缓冲在每个 TCP 套接字中单独存在。
    • I/O 缓冲在创建套接字时自动生成。
    • 即使关闭套接字也会继续传递输出缓冲中遗留的数据。
    • 关闭套接字将丢失输入缓冲中的数据。
    • 本端调用一次 write(),对端可能要分几次 read() 才能读完。

    数据边界
    TCP 是流式的数据传输,消息没有边界,需要应用层自己去定义消息边界。
    UDP 是数据报传输,所以协议保证了一次只能接收一个数据报。
    个人表达:数据边界意思是,数据会不会自动分割,比如两个结构体连续存在一段内存中,那是有边界的,结构体把其分割了。若把其数据拷贝到数组里面,那是无边界的,因为分不清从哪里才是分割线

    UDP 网络编程

    • UDP 是可以使用 bind() 函数的,主要是配置本地IP和端口号。若不适用,则由系统随机分配。
    • UDP 是可以使用 connect() 函数的,主要是配置远端IP和端口号。若不使用,则每次调用 sendto() 函数时都要设置、删除远端IP和端口号,耗时。

    关闭I/O流

    • 调用 close() 后:
      • 输入缓冲区的数据被丢弃。
      • 输出缓冲区的数据依旧能发送到目的端。
    • 调用 shutdown() 后:
      • 关闭输入流后,输入缓冲区的数据被丢弃。后面新来的数据流,会对其进行 ACK,然后丢弃。
      • 关闭输出流后,输出缓冲区的数据依旧能发送到目的端。

    DNS

    • DNS主要基于UDP。
    • 目前全球只有13台域名根服务器。
    • 并不是每条DNS查询都要到达根服务器的,查询是逐级查询,各级都有缓存表,先查缓存表中的,没有再往上报。
    • 8.8.8.8是Google公司提供的免费DNS服务器的IP地址。
    • 也可以指定本地的DNS服务器,只要能解析域名与IP即可。

    TCP:

    • MSS,最大报文段长度。在连接建立的时候,即在发送SYN段的时候,同时会将MSS发送给对方(MSS选项只能出现在SYN段中!!!),告诉对端他期望接收的TCP报文段数据部分最大长度。
    • https://blog.csdn.net/bobozai86/article/details/87372606

    套接字选项

    • 套接字类型只能在创建时决定,以后不能再更改

    服务器快重启

    • 因为异常断开后原套接字进入 time-wait 状态(一般会维持几分钟),还没有进入 close 状态,所以其端口号等数据还是被占用的。服务器重启后不能正常使用该端口。
    • 所以采用 SO_REUSEADDR 设置。作用:
      1. 当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。
      2. SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可以测试这种情况。
      3. SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个socket绑定的ip地址不同。这和2很相似,区别请看UNPv1。
      4. SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的多播,不用于TCP。

    参考

  • 相关阅读:
    day 66 ORM django 简介
    day 65 HTTP协议 Web框架的原理 服务器程序和应用程序
    jQuery的事件绑定和解绑 事件委托 轮播实现 jQuery的ajax jQuery补充
    background 超链接导航栏案例 定位
    继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素
    属性选择器 伪类选择器 伪元素选择器 浮动
    css的导入方式 基础选择器 高级选择器
    03-body标签中相关标签
    Java使用内存映射实现大文件的上传
    正则表达式
  • 原文地址:https://www.cnblogs.com/lizhuming/p/15169765.html
Copyright © 2011-2022 走看看