본문 바로가기

Golang/etc

tcp/ip 04

728x90
반응형

tcp/ip 프로토콜 스택: 데이터의 송수신 과정을 네 개의 영역으로 계층화.

 

상위 ------------------------------------------- 하위

application <- tcp/udp <- ip계층 <-link 계층

 

프로토콜을 계층화해서 얻는 장점 : 표준화 작업을 통한 개방형 시스템의 설계

 

- link 계층 : 물리적인 영역의 표준화에 대한 결과 / LAN, WAN, MAN 과 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역 

- IP 계층 : 네트워크 연결의 경로를 검색해주는 프로토콜 / IP 자체는 비연결지향적이며 신뢰할 수 없는 프로토콜이다 (데이터 손실 우려가 있다)

- TCP / UDP 계층 : IP 계층에서 알려준 경로를 바탕으로 데이터의 실제 송수신을 담당. (전송계층이라고 함)

* TCP는 하나의 데이터 패킷이 전송되는 과정에만 중심을 두고 설계된 IP 위에서 신뢰성 있는 데이터 전송을 책임지고 있다. 

데이터를 받았을때 전송한 호스트에게 받았는지 확인하는 통신을 하기 때문에 신뢰성있는 연결이 가능하다. 

- Application 계층 : 프로그램의 성격에 따라 서버<->클라이언트 간의 데이터 송수신에 대한 약속이 정해져있다. 

 

 

서버 프로그램

- listen() 함수의 호출은 연결 요청 데이터를 받아 임의의 연결 요청 대기큐에 저장하는 역할을 한다. 

따라서 listen()함수가 호출되었다고 해서 데이터 송수신이 이루어진 것이 아니다. 

- accept()함수가 호출되어야 연결요청 큐에 저장되었던 정보를 읽어 요청이 들어온 호스트와 연결 후 데이터 전송이 가능해진다. 이때 서비스 제공을 위해서 연결 요청을 받은 소켓과는 다른 소켓이 생성된다. 

 

 

클라이언트 프로그램

- connect()함수로 연결 요청을 하고 서버 프로그램쪽에서 accept()함수가 호출되어야 blocking 상태에서 빠져나올 수 있다. 

 

 

Iterative 서버의 구현

accept()함수를 반복적으로 호출하면 계속해서 서비스 제공이 가능하다. 

 

하지만 TCP는 데이터의 경계가 없기 때문에 한 번의 read()함수 호출로 데이터 전부를 읽어들이지 않을 수 있다. 

그렇기 때문에 수신된 데이터 크기만큼 전부 읽어 들일 때 까지 read() 함수를 호출해야 한다. 

 

728x90
반응형

'Golang > etc' 카테고리의 다른 글

golang udp example  (0) 2022.07.03
tcp/ip 05  (0) 2022.07.03
tcp/ip -02,03  (0) 2022.06.27
tcp/ip - 01  (0) 2022.06.22
Golang Apple Login (애플 로그인)  (0) 2022.06.14