最近学习了UNIX网络编程卷I这本书,现在做一些学习笔记供分享与回顾。
本篇主要聚焦于传输层,包括TCP,UDP和SCTP(stream Control Transmission Protocol,流控制传输协议)。绝大部分CS网络应用使用的是TCp或者UDP。SCTP是一个比较新的协议,最初设计用于跨因特网传输电话指令。
UDP是一个简单的、不可靠的数据包协议,而TCP是一个复杂、可靠的字节流协议。SCTP和TCP类似,也是一个可靠的传输协议,但是还提供消息边界、传输级别多宿支持和减小头端阻塞的方法。

  1. UDP
    UDP是一个简答的传输层协议,应用层往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,然后有被封装进一个IP数据报,然后发送的目的地,UDP不保证数据最终会到达,也不保证先后书序,也不好保证每个数据只到达一次。为了检测可靠性,可以往应用程序中添置一大堆的特性,包括对端确认和本端的超市和重传等。
    每个UDP数据报都有一个长度。会随着数据一起传递到接收端应用进程。我们提到过TCP是一个字节流协议,没有任何边界记录,这一点与UDP不同。
    另外UDP是一个无连接服务,同一个套接字可以发不同的数据报给不同的服务器。
  2. TCP
    TCP基于先建立连接,在可靠性方面,发送数据时要求对端返回一次确认。如果没有收到确认,会自动重传数据并等待更长时间,在数次重传失败后才会放弃,一般为4-10分钟。(依赖于具体实现)
    TCP含有用于动态估算客户与服务器之间的往返时间(round-trip time,RTT)的算法,以便于知道等待一个连接需要多少时间。
    另外会对发送数据进行排序,可以帮助接收端进行顺序接收以及重复数据的丢弃。
    TCP提供流量控制,会告知对端在任何时刻,对方可以接收多少字节的数据,称之为通告窗口(advertised window)。从而保证不会使得接收端缓冲区溢出。
    最后TCP连接是全双工的,应用层可以在任何时刻在进出两个方向上既发送又接收数据。建立全双工之后可以根据需求转化为一个单工连接。
    (UDP可以是全双工的)
  3. SCTP
    SCTP用关联一词代替连接,因为支持多宿而涉及到不止两个地址。
    与TCP不同,SCTP是面向消息的,提供各个记录的按序递送服务,和UDP一样,由发送端写入的每条记录的长度随数据一起传递给接收端应用。
    SCTP可以在连接的端点之间提供多个流,一个流上的某个消息的丢失不会阻塞同一关联下的其他流上的消息投递,和TCP会阻塞投递的特性正好相反。
    SCTP多宿特性使得每个SCTP端点可以支持多个IP地址,这个特性可以增强应对网络故障的健壮性。一个端点可能有多个冗余的网络连接,每个网络又可能有各自接入互联网基础设备的连接。建立关联后,如果某个网络或者某个跨越互联网的通路发生故障,SCTP可以切换到使用已与该关联相关的另一个地址来规避发生的故障。

以上就是这次学习的一些主要记录了下次应该会设计到TCP连接建立和一些套接字状态相关知识。

UNIX网络编程学习笔记(Racoon)相关推荐

  1. UNIX网络编程学习笔记(代码超详细解析)(持续更新)

    1. 其他函数准备 1. TCP 回射服务器程序: str_echo 函数 #include "unp.h"void str_echo(int sockfd) {ssize_t n ...

  2. 2021版!万字UNIX网络编程学习笔记(套接字篇)

    目录 1.一个简单的时间获取服务器的程序 2.套接字篇 2.1 套接字简介 2.2 套接字中常用的函数 2.3 基本TCP套接字编程 2.3.1.socket函数 2.3.2 connect函数 2. ...

  3. Unix网络编程学习笔记之第11章 名字与地址转换

    一. 域名系统(DNS) 1. 简介 DNS主要用于主机名和IP地址之间的映射. 主机名可以是简单的名字ljm,也可以是全限定域名ljm.localdomainbaidu.com等. 2.资源记录 D ...

  4. java 网络编程学习笔记

    java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...

  5. [Linux网络编程学习笔记]索引

    一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...

  6. 编程开发:Linux网络编程学习笔记

    非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...

  7. 15Java网络编程学习笔记

    Java网络编程学习笔记 文章目录 1 网络基础 1.1 网络通信 1.2 网络 1.3 IP地址 1.5 域名 1.6 端口号 1.7 网络通信协议 1.8 TCP协议 1.9 UDP协议 2 In ...

  8. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  9. python网络编程学习笔记(二)

    python网络编程学习(四) 多用途客户端协议 一.ftp 功能:上传下载文件,删除命名文件,建立删除目录,自动压缩,保存目录 1.代码: #coding=utf-8 '''连接远程ftp服务器,显 ...

  10. Unix网络编程学习日记

    今天开始拜读<Unix网络编程>.找到的源代码在Linux下有各种问题,最后决定还是自己从头写比较好. 从第一个时间服务程序开始学习.今天先看一下主要的头文件的作用. 在common.h中 ...

最新文章

  1. Go Mvc的一个示例
  2. RSA算法和RSA数字签名算法的实现
  3. jmeter常用功能
  4. 问题查询-批文页面显示别人操作的结果
  5. 软件工程(英文版 第8版)
  6. 流体连续性方程【The Equation of Continuity】
  7. 数据错误(循环冗余检查) 各种解决方法
  8. 如何让梯形变成平行四边形_把梯形转化成平行四边形.ppt
  9. L2UWE: A Framework for the Efficient Enhancement of Low-Light Underwater Images阅读札记
  10. 联想旗下佳沃集团拟收购智利三文鱼公司Australis Seafoods S.A.
  11. 利好消息再释放 重卡自动驾驶的智慧物流“掘金”计划
  12. 测试18款听书APP,免费听喜马拉雅上付费音频的办法其实很多
  13. 搭建自己的知识体系 自我提升
  14. InstallShield 2010集成 net Framework 4的安装包制作
  15. java毕业生设计弹幕视频网站计算机源码+系统+mysql+调试部署+lw
  16. 【新观点】孙悟空其实是太上老君炼的丹药变成的
  17. Blazor University (47)依赖注入 —— Singleton 依赖
  18. JUC源码级学习(下)-函数式编程、stream流、jvm等
  19. 电子游戏理论基础知识的初步探索(转)
  20. 京东精英接班后,永辉能否借“科技”重回千亿市值?

热门文章

  1. 接口管理工具Rap的安装
  2. hdfs 指令_HDFS之一:hdfs命令行操作
  3. 在编写网站的时候,给一个div设置背景图片,怎么让这个图片随着div大小的改变,而等比例的缩放。
  4. ADC相关参数之---INL和DNL
  5. STM32cubIDE 黑色主题_儿童画创意第二弹 | 绘画的秘密+万圣节主题画,10个创意教程一次看完!...
  6. 用Java做一个判断闰年和平年代码
  7. 服务器root权限安全策略配置
  8. ESLint和Prettier的配置
  9. Eclipse同屏显示两个代码编辑窗口
  10. Java jdk keytool 实现SSL双向认证的方法(客户端与服务器)