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. python对真假的判断方式

    一.如下是以下值就认为是假 1.None-->None值 2.False-->False值 3.0-->数值零不管它是int,float还是complex类型 4.'',(),[]- ...

  2. NOI十连测 第四测 T3

    思路: 算法一:可以n^2找出每个点的权值,然后n^2做完,预计得分10 算法二:随机找点然后每次找最高..貌似只有10分?然而考试的时候煞笔了,边界设成inf.. 算法三:随机找几个点,然后随机爬山 ...

  3. C 宏定义

    C/C++中宏使用总结 .C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释 ...

  4. C语言中long类型,int类型

    long类型表示long int,一般简写为long,注意long不表示long double.虽然有时候会有sizeof(long)=sizeof(int),long int与int是不同的: 16 ...

  5. EMMA: 免费java代码测试覆盖工具

    From:http://emma.sourceforge.net/ EMMA: a free Java code coverage tool   Code coverage for free: a b ...

  6. 剑指offer-面试题10:二进制中1的个数

    题目:请实现一个函数,输入一个函数,输出该数二进制表示中1的个数.例如把9 表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 这道题最典型的方法就是用移位统计,就比如统计9的二进制1 ...

  7. uva 1589 by sixleaves

    坑爹的模拟题目.自己对于这种比较复杂点得模拟题的能力概述还不够,还多加练习.贴别是做得时候一直再想如何检查车中间有没有棋子,炮中间有没有棋子.到网上参考别人的代码才发先这么简单的办法,自己尽然想不到. ...

  8. 用数据说话,外贸B2C产品选择(上篇)-热门搜索法

    当选择了外贸这条路,那就是选择了跟外国人做生意.那面对全球这么大的市场究竟选什么样的产品才干脱颖而出?什么样的产品才是全球卖家喜欢的呢?什么样的产品才干让自己財源滚滚?我想这都是全部刚開始外贸创业的人 ...

  9. [Android 4.4.3] 泛泰A860 Omni4.4.3 20140610 RC2.0 三版通刷 by syhost

    欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...

  10. Java - 文件(IO流)

    Java - 文件 (IO)   流的分类:     > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter     ...