UNP——第二章,端口号,套接字对,TCP,UDP输出

1.端口号

  端口号用于区分使用相同协议的进程。

  TCP69 与 UDP69 是不同的。

  端口号范围 0 - 65535, 其中 0- 1023 是保留端口。

2.套接字对

  TCP服务通过套接字对,唯一识别进程。

  如上,服务器fork后,两个子进程都 bind 了 12.106.32.254:21,那么TCP服务收到对端的数据包,应该给哪个进程呢?

  所以套接字对才是数据收发的唯一表示,两个套接字对,是连接的唯一标识。

3.TCP输出

  如上,TCP是带缓存的。

    (1)应用程序调用 write,数据只是拷贝到TCP缓存,如果缓存空间不足,write会阻塞(若设置非阻塞,会直接返回),直到所有数据传到 TCP缓存。

    所以write返回后,并不表示数据传到了对端,只是写入了TCP缓存。

    (2)TCP缓存的大小可以用 SO_SNDBUF 设置

    (3)TCP如何处理缓存数据?

        TCP会按照MSS进行分节,并保留副本,并传递给IP层,IP层会打包分组,传到链路层,链路层按照MTU生成帧,传到物理层。

        这里:

          MSS <= MTU - 20(TCP首部字节数) - 20(IP首部字节数)

          是设置MSS的推荐方法,原因是避免MTU分组

    (4)TCP会等待对端的ACK,收到ACK,就将缓存对应分节释放,若没收到,要超时重传

    (5)TCP的分节最终会到链路层的输出队列,若输出队列已满,链路层会丢弃分组,并使用协议栈向上报错,TCP会注意这个错误,并在某个时刻重传分节。

       上面操作,应用无需关心。

3.UDP输出

如上,UDP分组是没有缓存的。因为UDP不可靠,所以不需要保存数据副本。

  (1)UDP可以使用SO_SNDBUF设置UDP数据报的大小上线,如果应用传入的数据超出上线,内核向进程返回错误EMSGSIZE。

  (2)应用写的数据,实际上是写入内核缓存,缓存的数据传入链路层输出队列,就直接丢弃。

  (3)如果链路层输出队列满了,会丢弃UDP的数据,并向上报错,内核会返回ENOBUFS错误给进程。

  (4)UDP无法设置MSS,由于MTU的缘故,写入大数据时,会造成比TCP更多的分片。

原文地址:https://www.cnblogs.com/yangxinrui/p/12203801.html

时间: 2024-08-30 14:38:07

UNP——第二章,端口号,套接字对,TCP,UDP输出的相关文章

Socket(套接字) IP TCP UDP HTTP

Socket(套接字) (转)什么是套接字(Socket)? 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)(socket是操作系统提供出来的接口)的接口,区分不同应用程序进程间的网络通信和连接.生成套接字,主要有3个参数:通信的目的IP地址.使用的传输 层

Linux 套接字编程 - TCP连接基础

第五章的内容,实现一个echo服务器和对应的客户端,主要收获: 0. TCP socket编程主要基本步骤 1. SIGCHLD信号含义(子进程退出时向父进程发送,提醒父进程对其状态信息进行一个获取),waitpid 和 wait在使用上的差异,前者可以配置参数设定为非阻塞方式调用,更加灵活. 2. 信号处理函数与其过程(尤其是信号发生后不列队这个性质),相同的信号多次发生(间隔非常接近的话)可能仅会调用一次信号处理函数 3. 信号处理对慢系统(阻塞)调用如accept等的影响(如果信号处理设置

Internet 套接字(TCP、UDP) 基础概念

个人博客首页(点击查看详情)-- https://blog.51cto.com/11495268个人微信公众号(点击查看详情)-- https://blog.51cto.com/11495268/2401194???? 1.简介 ????这个世界上有很多种套接字(socket)-- 如 DARPA Internet 地址(Internet 套接字).本地节点的路径名(Unix套接字).CCITT X.25地址(X.25 套接字)等:Internet 套接字 是最具代表性的,也是最经典最常用的(我

套接字,TCP,UDP

一.Socket 1.socket由来 #Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口. #我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的. 2.socket分类 #1.基于文件类型的套接字家族 #套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成

linux netlink套接字实现类似ss命令 ,统计套接字以及TCP信息

参考了 ss的源代码 以及 netlink相关资料:http://blog.csdn.net/scdxmoe/article/details/27711205 实现结果为: gcc netlink_dig_530_7.c -o netlink_dig_530_7 ./netlink_dig_530_7 state      family     l.addr     l.port       r.addr     r.rport LISTEN     AF_INET   localhost  

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架

???HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中.????为了让使用者能方便快速地学习和使用 HP-Socket

UNP——第二章,传输层

1.为什么要了解协议 程序员与协议合作,完成应用. 了解协议是为了了解协议完成了什么,提供了什么服务,自己还应该做什么. 2.从协议的角度,套接字是什么 套接字是协议的接口, IP套接字,代表可使用IP协议服务. TCP套接字,代表可使用TCP协议服务. 3.对编程而言,UDP协议应该了解什么 (1)应用的消息被封装到UDP数据报,UDP数据包被封装到IP数据报. (2)UDP不可靠,UDP不保证数据一定到达,按顺序到达,重复到达. (3)UDP只保证到达的数据是正确的(进行了错误校验) (4)

linux网络环境下socket套接字编程(UDP文件传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

套接字编程 ---- TCP协议

一.套接字(socket) 套接字socket: ip地址 + port端口号.在TCP/IP协议中,它唯一标识网络通讯中的一个进程. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socketpair就唯一标识一个连接. socket本身有"插座"的意思,因此用来描述网络连接的 一对一关系. TCP/IP协议规定,网络数据流应采用 大端字节序,即 (内存)低地址高字节(数据). 二.TCP_SOCKET 相关 TCP 协议  ----