TCP协议可以说已经是IT人耳熟能详的协议,最近在学习socket网络编程时后重新温习一下这个协议,针对一些问题做了一些总结,很多理解可能还不是很准确。

1. 协议是什么?所谓的各种网络协议无非是一种通信标准,就好象两个人要说话,那么我们首先得规定一种语言,是中文还是英文,这样大家才能在接下来的交流中进行顺利的沟通。至于标准的实现是和代码操作系统无关的,具体从逻辑上怎么实现这个协议就是自己操作了,只要遵守协议标准,大家就能顺利的进行通信/交流。

2. 为什么会有协议分层?OSI有七层协议(实际通用操作系统用的五层系统),电信通信网络协议也有多层。以前读书时候总是去背。其实这种问题可以反过来想,如果只有一层,会怎么样,或者我们自己去设计,应该设计几层?首先假设协议不分层,大家可以想象把几层合并在一起会怎么样,那我们可能只是做一个简单的应用层程序,那可能会完成大量的接口通信工作,还得自己去写或者调用路由层,传输层方法,甚至更多。由于有了分层的概念,那么我们每一层有自己相对独立的功能,例如寻找IP地址就交给IP层去完成了。这样大大提高了大家工作效率,每一层开发人员除了关注自己本身功能的开发,只用去关心接口问题了。就好象操作系统同样有分层,驱动,操作系统,应用层。

3.为什么有传输层?同样的逆向方法,如果没有TCP/IP层,应用层程序怎么进行网络通信?我们能够通过IP找到目标,但是却没有办法确定要和那个应用程序通信,或者说没有办法确定和那个进程/线程通信。通过IP+port的方式可以方便的确定要通信的进程。

4. 如何理解协议不同字段对应功能?通过一个wireshark工具的截图我们可以很清楚的看到一个协议其实就是一段编码,至于不同字段功能可以理解在协议设计时候根据设计需求对字段进行分段,并且有严格标准。例如第一个字段(由于是16进制编码,实际是2 bytes)是source port(源端口),他的值是22(十六进制也就是16),也是通用的端口。我们在应用程序编程时候会避开这些通用端口。通过这个我们也可以算出port的范围应该是0~65535(2^16-1)。后表面的一串便面含义我们这可以去查阅相关的协议。

5.什么是TCP中的面向连接?通信中的所谓建立的面向连接,不是真的能建立起一个通道,然后再进行数据传输。对于下层的消息协议来说,都是分段打的包。无非是短时间内两个进程需要在网络上进行高速有效的通信,理解为面向连接的通信。如何才能保证高效有效的通信,除了光知道IP地址肯定不行,还需要一系列的机制来保证这个通信。为了知道对方更多的信息以及双方约定一些通信规则,于是在正式传送前肯定需要一个通信,双方约定一些通信规则,这个通信过程可以理解成连接的建立。通信活动结束后,不能让进程还占着资源啊,所以还的释放,这个可以理解成连接的释放或者断开。

6. 什么是socket 编程?因为底层和传输层通常已经封装在驱动程序和操作系统里面了,我们再上层应用程序编程编程时候不必再去重写像TCP/UDP这一类传输层的东西,当然也可以去修改。上层应用程序只需要调用一些方法就可以完成网络通信,在Unix一类的由c语言构成的操作系统来说,一般封装在socket的方法里。在这个基础上进行的网络编程称为套接字编程。

关于网络协议和socket编程基本概念的更多相关文章

  1. C语言小项目-基于TCP协议和SOCKET编程的网络通信系统

    1.1 功能结构图   网络通信系统一共由4个模块组成,分别是点对点客户端.点对点服务端.服务器中转服务端.服务器中转客户端.这4个模块是成对使用的,点对点客户端和点对点服务端一起使用,服务器中转服务 ...

  2. 四层协议和Socket编程

    <四层协议图> <Soclet编程模型图>

  3. TCP协议和socket API 学习笔记

    本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类:  原文地址:TCP协议和socket API 学习笔记 作者:gilb ...

  4. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

  5. Http TCP/IP协议和socket之间的区别和联系

    总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像 ...

  6. TCP/IP协议和socket

    1.传输层基于tcp协议的三次握手和四次挥手? 传输层有两种数据传输协议,分别为TCP协议和UDP协议,其中TCP协议为可靠传输,数据包没有长度设置,理论可以无限长,而UDP协议为不可靠传输,报头一共 ...

  7. java网络编程之Socket编程

    概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...

  8. linux网络编程之socket编程(一)

    今天开始,继续来学习linux编程,这次主要是研究下linux下的网络编程,而网络编程中最基本的需从socket编程开始,下面正式开始学习: 什么是socket: 在学习套接口之前,先要回顾一下Tcp ...

  9. 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

随机推荐

  1. oc语言--BLOCK和协议

    一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性:(1)可以保存代码(2 ...

  2. Oracle select 中case 的使用以及使用decode替换case

    表结构如下: 将money<50的显示为贫农,money<80的显示为中农,其他的显示为富农,sql 语句如下 select name, case then '贫农' then '中农' ...

  3. ArcEngine10在VS2010中编译问题

    原文 http://www.gisall.com/html/47/122747-4141.html 问题描述: 前段时间装了个VS2010,用ArcEngine10在VS2010中基于.Net Fra ...

  4. bzoj1654 [Usaco2006 Jan]The Cow Prom 奶牛舞会

    Description The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in ...

  5. apache FtpServer 整合spring部署

    我们在项目中可能会出现这样的需求,使用ftp上传很大的文件后对需要对文件进行相应的逻辑处理,这时我们可以使用apache ftpServer来处理这段逻辑,只要我们做相应的部署和编写我们的逻辑代码,这 ...

  6. Zookeeper 1、Zookeeper 定义与工作原理

    1.什么是Zookeeper » Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务 » 它包含一个简单的原语集,分布式应用程序可以基于它实现同步 ...

  7. error C2440

    error C2440: "初始化": 无法从"std::_List_const_iterator<std::_List_val<std::_List_sim ...

  8. html&CSS初学

    <link href="https://fonts.gdgdocs.org/css?family=Lobster" rel="stylesheet" ty ...

  9. LoadRunner如何在注册业务脚本中设置参数化唯一性

    LR在录制一个网站注册业务的脚本时,突然间遇到一个问题:注册时,由于注册用户需要验证唯一性,所以在LR回放脚本时,用Run-time Viewer工具回放可以发现(先在脚本中设置几个断点),真实运行的 ...

  10. Linux常见目录作用

    Linux中一切皆文件 文件类型: 一般文件 - 目录文件 d 链接文件 l 块设备   b    (以块为单位进行操作,比如硬盘) 字符设备 c  (以字符为单位进行操作,比如主存) socket  ...