TCP的特点:
1)、发送方和接收方需要建立连接,整个过程是先建立连接,发送数据,关闭连接的过程。
2)、可靠性,TCP含有RTT算法,可估算等待确认的时间,从而决定什么时候重传。
3)、分包编号发送。
4)、流量控制,TCP会告诉发送方自己能接收多少数据(advertised window),只有自己有空间才能接收发送方的数据。
5)、TCP是双向通信的,既是接收方又是发送方,TCP维护着2个方向上的信息。
TCP连接建立的过程:
在建立连接的过程中,可以随着SYN握手信息带上一个MSS选项,该选项可以指定该连接中发送的一个Segment中的最大数据量。
TCP终止连接的过程:
TCP连接状态转换图:
这张图描述了客户端,服务端在一个TCP连接中可能出现的所有状态。
发送一个分节数据的完整过程及涉及到的状态转换:
可以看到,为了发送一个分节的请求,得到一个分节的回复,我们会涉及到8个字节的额外开销。这就是为什么TCP长连接比短连接好的原因了。
TCP最后的TIME_WAIT状态存在的原因:
首先要明确的是默认的TIME_WAIT状态持续的时间为2MSL.
1、保证服务端能正确关闭,因为客户端最后返回的ACK可能丢失,此时服务端会重传FIN,客户端需保留状态以回应。
2、防止同一端口上新的连接获取老连接的分节,在TIME_WAIT状态的连接未释放端口,不能创建新的连接。
- 大小: 41.5 KB
- 大小: 35.7 KB
- 大小: 193.7 KB
- 大小: 117.4 KB
分享到:
相关推荐
UNIX 网络编程读书笔记内容涵盖了 UNIX 网络编程的基本概念、Socket 编程、TCP/IP 协议、网络服务器设计思想、并发服务器设计等多个方面。整体来说,这篇读书笔记对 UNIX 网络编程的知识点进行了系统的总结和概括。 ...
在深入探讨UNIX网络编程时,我们关注的核心是TCP/IP连接的生命周期,特别是涉及套接字关闭的细节。在TCP连接的生命周期中,关闭连接通常涉及四个阶段,这被称为"四次挥手"(Four-Way Handshake)过程。下面将详细...
《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和Unix系统下Shell编程的经典书籍,通过对这本书的读书笔记分析,我们可以提炼出一系列关键的知识点,涵盖了系统管理、服务配置、软件更新以及网络服务配置等方面...
在Unix网络编程中,传输层是网络通信的核心部分,主要涉及TCP、UDP和SCTP这三种协议。本读书笔记主要关注TCP协议及其相关概念。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。TCP通过...
根据提供的文件信息,我们可以归纳出以下关于Unix网络编程的关键知识点: ### 一、TCP/IP连接建立与拆除 在TCP/IP协议栈中,建立一个可靠的连接是通过三次握手完成的,而断开连接则是通过四次挥手来实现的。 1. *...
8. **库函数与系统调用**:C语言是UNIX编程的主要语言,系统调用(如上述的`open()`、`write()`等)是直接与内核交互的接口,而库函数(如`stdio.h`中的`printf()`)则提供更友好的编程体验。 9. **网络编程**:...
- **网络编程**:支持TCP/IP协议栈,实现网络间的通信。 - **标准**:Unix系统的API遵循POSIX(便携式操作系统接口)标准,这确保了程序可以在不同的Unix系统上运行而无需修改。 #### 三、内核(Kernel) - **...
本篇笔记主要围绕Unix系统下的TCP/IP分层协议模型以及如何在Linux环境中进行socket套接字编程展开,同时也涉及到了进程间通信(IPC)的相关知识。 首先,TCP/IP协议族是互联网的基础,它将复杂的网络通信过程分解为...
### Linux网络编程基础知识点 #### 一、网络工具与协议概览 在Linux网络编程中,`netstat`是一个常用工具,用于显示网络连接、路由表、接口统计、masquerade连接、多播成员等信息。通过选项`-an`可以查看详细的...
网络通信基础知识,socket网络编程的一些基础知识,Socket网络编程学习笔记,网络编程总结,2011-学习资料大全:java_socket编程,学习网络编程的十个步骤,socket编程入门(经典版),Unix_网络编程学习笔记,...
这份笔记详细介绍了Linux网络编程的基础知识和一些常用函数的使用,对于学习和掌握Linux网络编程有着重要的指导意义。 首先,Linux网络编程的程序通常分为客户端和服务端两部分。服务端程序需要先启动并绑定到一个...
### Linux网络编程详细知识点 #### 一、Linux网络基础知识 **1.1 客户端与服务端程序** - **概念区分**: - **客户端**:负责发起连接请求的一方,通常用来发送数据或请求服务。 - **服务端**:等待客户端连接...
domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX 和AF_INET 等). AF_UN IX 只能够用于单一的 Unix 系统进程间通信,而 AF_INET 是针对Internet的,因而可以允许在 远程 主机之间通信(当我们 man socket ...
通过阅读《LinuxUNIX系统编程手册》(英文版),配合个人整理笔记和config.ini配置文件的辅助,读者将能够全面掌握Linux和UNIX环境下的系统编程技巧,从而能够编写高效、稳定的系统级应用程序。无论是对操作系统原理...
UNIX的网络编程接口,如socket,被广泛用于开发网络应用。另外,netstat和ping等网络诊断工具也是日常运维中的常用手段。 最后,UNIX提供了丰富的开发环境和工具,如GCC(GNU Compiler Collection)用于编译C/C++...
这两者的编程接口有很高的相似性,因此学习Unix编程对理解Linux编程也非常有帮助。 本书可能包含以下内容: 1. **shell编程**:讲解Bash shell和其他Unix shell的基本语法,包括命令行参数、环境变量、重定向、...
7. **网络编程笔记**:提供的笔记可能包含了项目的设计思路、关键代码解释和调试技巧,这些都是学习过程中宝贵的资源。通过阅读笔记,可以更好地理解代码背后的逻辑。 8. **右3DS(right3ds)**:虽然标签没有明确...
《TCP/IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议》是一本深入解析网络通信协议的专业书籍,其内容涵盖了TCP/IP协议栈中关键的几个层面。以下是其中涉及的重要知识点: 1. **TCP事务协议(TCP Transaction ...
### Linux网络编程笔记(修订版) #### 基本概念 网络编程是在计算机网络中实现数据交换和资源共享的重要技术手段。对于Linux环境下的网络编程,理解基础概念是至关重要的第一步。 1. **OSI参考模型**:开放系统...
这份个人笔记涵盖了几个关键的Linux技术:GDB调试工具、Linux网络编程以及Makefile构建自动化工具。以下是对这些主题的详细阐述: 一、GDB(GNU调试器) GDB是GNU项目的一部分,是一款强大的源代码级调试器,用于C...