【网络编程】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设置。作用:- 当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。
- SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可以测试这种情况。
- SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个socket绑定的ip地址不同。这和2很相似,区别请看UNPv1。
- SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的多播,不用于TCP。
参考
- 《TCP/IP网络编程》
- 李柱明博客-TCP/IP TCP详细笔记
- github 阿婆主
【网络编程】TCPIP-小笔记集合的更多相关文章
- 《Python网络编程》学习笔记--UDP协议
第二章中主要介绍了UDP协议 UDP协议的定义(转自百度百科) UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务 ...
- 《Unix网络编程》读书笔记
UDP和TCP UDP(User Datagram Protocol,用户数据报协议)是一个无连接协议,不保证UDP数据报会到达其最终目的地,不保证各数据报的先后顺序跨网络后保持不变,也不保证每个数据 ...
- 《TCP/IP网络编程》学习笔记整理
简介 本笔记目前已包含 <TCP/IP网络编程>中的前 5 章,后续章节会在近期内补充完整. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔 ...
- 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档
Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...
- 《TCP/IP网络编程》读书笔记
1.Windows 下的 socket 程序和 Linux 思路相同,但细节有所差别(1) Windows 下的 socket 程序依赖 Winsock.dll 或 ws2_32.dll,必须提前加载 ...
- Linux网络编程1——小端模式与大端模式
数据存储优先顺序的转换 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式).内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式.内存的高地址 ...
- 《Python网络编程》学习笔记--从例子中收获的计算机网络相关知识
从之前笔记的四个程序中(http://www.cnblogs.com/take-fetter/p/8278864.html),我们可以看出分别使用了谷歌地理编码API(对URL表示地理信息查询和如何获 ...
- Python实战之网络编程socket学习笔记及简单练习
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 socket.AF_INET IPv4(默认) socket.AF_IN ...
- Java网络编程(读书笔记)
部分片段: 早期web服务器由于Http链接短暂而有所掩盖,由于web页面和嵌入式的图片一般很小(至少与通常通过FTP获取软件包要小很多),由于web浏览器在获取各个文件后挂起连接,而不是一次保持数分 ...
随机推荐
- Python使用笔记20--网络操作小练习
1 ''' 2 2.自己抓取qq群的接口,传入一个群号,然后把群成员的头像下载到本地,头像用群备注来命名,如果没有 3 群备注,那么取昵称. 4 ''' 5 import requests 6 imp ...
- C语言:位运算加密
数据加密解密是一个常用的功能,如果你不希望让别人看到文件中的内容,可以通过密钥(也称"密码")将文件的内容加密.比如文本文件(.txt),加密前的内容是能够读懂的,加密后的内容是& ...
- 一行代码打印python之禅
就这一句: import this 输出: The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is be ...
- hadoop源码_hdfs启动流程_3_心跳机制
hadoop在启动namenode和datanode之后,两者之间是如何联动了?datanode如何向namenode注册?如何汇报数据?namenode又如何向datanode发送命令? 心跳机制基 ...
- [刘阳Java]_CSS图片画廊
图片画廊也是一种比较经典的案例.本节文章主要简单给大家介绍了CSS2实现图片画廊,采取的实现思路 ul放置图片 li标签里面嵌套a标签 a标签里面嵌套两个图片的标签 通过简单的伪类来实现图片预览效果 ...
- [004] .NET 的现状和未来
我们总是能听到一些人说,.NET 不行.学 .NET 没发展前途之类的言论,有的童鞋听多了便也开始怀疑自己选择的 .NET 方向是不是错了. 不得不承认,在 .NET 没有实现跨平台之前,市场行情确实 ...
- vlc+flv.js 摄像头 H5 直播
背景 业务需求:用最短的时间搞定摄像头直播到Web页面.因为没有过这方面经验,所以走了很多弯路,其实也不算弯路吧,大部分时间花在学习基础概念,寻找快速方案中.惯性思维想当然的以为找组件,配地址就能搞定 ...
- PAT甲级:1036 Boys vs Girls (25分)
PAT甲级:1036 Boys vs Girls (25分) 题干 This time you are asked to tell the difference between the lowest ...
- c#链接MySql数据库方法
方法一: 打开visual studio,在项目->管理NuGet程序包->搜索"MySql.Data"并安装: 在程序部分,引入 using MySql.Data.M ...
- P2476-记忆化搜索
链接 DP? 我们看看,这个状态似乎有亿点点多. 我们看看数据范围,数量不超过5,颜色数不超过15. 15维DP显然不靠谱. 那么我们就思考一下--个数? 记忆化搜索可ac: #include< ...