Socket Programming: Creating Network Applications
複习一下当我们建立一个network application,我们基本上包含了一组programs,client program & server program,分别存在于两个end system,当两个program执行后,client process & server process被建立,这些processes透过socket互相沟通,因此身为一个developer主要就是负责撰写code for clicent program & server program
Network applications有两种types,一种为implementation
,主要实作于protocol standard
,例如 RFC 或者其他 standard document,这样的application通常又被称为open
,因为规则以及行为是被公开,因此此类别的程式设计需要遵守standard的标準
。
另一种type则为proprietary
,此类型主要运用的protocol
尚未被公开发布在RFC或者其他国际网路规範,client side & server side program都由同组开发者完成,而开发者完全掌控code的内容,由于此类别并非实作于公开的protocol上,其他独立开发者也就不能开发与此application相互操作的code。
下面会透过简单实作的code来探讨开发一个client-server application的简易流程,在开发者阶段,第一步主要得决定此application是基于 TCP || UDP
,因此会就此两种protocol类型来介绍。
Socket Programming with UDP
sending process将packet push 到 socket 前,UDP会先将destination address
资讯带给packet,packet到达sending socket时,Internet便会根据此资讯导引到receiving process socket。由于传递的途中或许会经过许多network application process以及多个sockets,辨别destination receiver socket是必要的,因此在socket建立过程中,port number
会被指认到socket当作idtentifier。而此项讯息也会被包含在destination address里。此外,source address的资讯有同样会被带入packet,特别注意到,source address的带入动作并非由UDP application code执行,而是自动由operating system完成的。
Socket Programming with TCP
不同于UDP,在client & server 开始彼此沟通前,必须先通过handshake
的行为并建立TCP conntection
,TCP connection
的两端分别连结着sending socket & receiver socket,建立的同时也会将两端的IP address 以及 port number连结于TCP connection上,两端的互动都将由socket把data丢到TCP connection
传递。不同于UDP的server必须先将destination address 附在 packet上才能进入socket传递。
相同的是,两者的server都必须是在running的状态下,client端才能initiate动作。而在TCP中,首先 clicent initiate a TCP connection to the server,这在client program建立TCP socket
时完成,当建立的途中会将Server host
的IP address
以及 socket的port number
带入,建立完成后开始three-way handshake并建立TCP connection with the server,建立connection主要是在transport layer
,在应用层的client and server program是观察不到的。
TCP socket为所有建立tcp coneection之前先执行一个打招呼的动作,也就是handshake的部分,接着的connection socket才是主要用于传递沟通的管道,