네트워크/tcp ip

서버에 접속하자! [tcp헤더의 제어 정보]

허브포트 2019. 12. 17. 20:07

클라이언트는 서버에 접속하려고 한다.

 

그래서 소켓을 만들었다.

 

소켓을 만든 직후 아무것도 기록되어 있지 않아서 통신 상대가 누구인지도 모르고 송신 의뢰가 와도 데이터를 어디보내야 할지 막막하다.

 

따라서 브라우저는 url을 바탕으로 서버의 ip 주소를 조사하고, 포트 번호는 80번을 사용하도록 규칙으로 정해져 있으니 필요한 정보를 안다고 할 수 있다는 것이다.

 

자 그런데 이 브라우저가 알고 있는 정보만으로는 턱 없이 부족하다.  

 

socket을 호출하여 소켓을 만드는 동작만으로는 프로토콜 스택에 아무것도 전달이 안되는 것이다.

그러므로 서버의 IP 주소나 포트 번호를 프로토콜 스택에 알리는 동작이 필요한데, 이것이 접속 동작의 한가지 역할인 것이다.

프로토콜 스택 참고( http://www.ktword.co.kr/abbr_view.php?m_temp1=432)

 

프로토콜 [정보통신기술용어해설]

 

www.ktword.co.kr

자 그럼 서버쪽 입장이 되어보자!!

 

서버에도 소켓이 만들어졌지만 서버측의 프로토콜 스택도 클라이언트측과 마찬가지로 소켓을 만드는 동작만으로는 통신 상대를 알 수 없다.

 

그래서 클라이언트에서 전달한다.

 

"네네. 이곳의 IP주소는 xxx.xxx.xxx.xxx 이고 port는 aaaa 입니다. 데이터 송수신을 하고싶은데 가능합니까?"

 

 

라고 정보를 주어서 통신하려는 클라이언트가 있다는 것을 서버에게 전달하는 것이다. 

 

이와 같이 클라이언트에서 서버측에 통신 동작의 개시를 전달하는 것도 접속 동작의 역할중 하나이다.

 

접속 동작의 첫번째 동작은 상대와의 사이에 제어 정보를 주고받아 소켓에  필요한 정보를 기록하고 데이터 송수신이 가능한 상태로 만드는 것이다.

 

여기에서 나온 클라리언트측의 IP주소나 port number 를 서버측에 알리는 것이 제어정보 주고받기의 구체적인 예 이다. 제어 정보는 데이터 송수신 동작을 제어하기 위한 정보이며, IP 주소나 port number는 대표적인 것 중의 하나이다. 

 

그리고 접속 동작에서 주고받는 제어정보는 통신의 규칙으로 정해져 있으므로 규칙에 따라 접속 동작을 실행하면 필요한 정보가 전달되고 데이터를 송수신할 수 있는 상태가 된다.

 

데이터 송수신 동작을 실행할 때는 송수신하는 데이터를 일시적으로 저장하는 메모리영역이 필요한데, 이메모리 영역을 '버퍼 메모리' 라고 부른다. 

 

버퍼 메모리의 확보도 접속 동작을 할 때 실행되는데, 이것이 <접속>한다는 동작이다.

클라이언트와 서버는 이 헤더에 필요한 정보를 기록하여 연락을 취하면서 통신 동작을 시행한다.

 

필드명칭 길이(비트) explain 설명
tcp헤더(20바이트) 송신처 포트 번호 16

이 패킷을 송신한 측의 프로그램의 포트 번호

수신처 포트 번호 16 이 패킷을 받는 상대 프로그램의 포트 번호

시퀸스 번호

(송신 데이터의

일련 번호)

32

이 패킷의 맨 앞 위치의 데이터가 송신 데이터의 몇 번째 바이트에 해당하는지를 송신측에서 수신측에 전달하기 위한 것

ACK 번호 

(수신 데이터의

일련번호)

32

데이터가 몇 바이트까지 수신측에 도착했는지를 수신측에서 송신측에 전달하기 위한것

ACK는 acknowledge의 약자로, '아크' 라고 읽습니다.

데이터 오프셋 4

데이터 부분이 어디부터 시작하는지를 나타냄

헤더의 길이를 나타낸다고 생각하라

사용하지 않음 6 이 필드는 현재 사용하지 않음
컨트롤 비트 6

이 필드의 각 비트가 각각 통신 제어상의 의미를 가짐

URG : 긴급 포인터의 필도가 유효하다는것 나타 냄

ACK : 수신 데이터의 일련번호 필드가 유효하ek는 것을 나타냄. 보통 데이터가 올바르게 수신측에 도달한 것을 의미.

PSH : flush 동작에 의해 송신된 데이터임을 나타냄.

RST :  접속을 강제로 종료하고 이상 종료시에 사용함.

SYN : 송신측과 수신측에서 일련번호를 서로 확인함.  이것으로 접속 동작을 나타냄.

FIN : 연결 끊기를 나타냅니다.

 

윈도우 16

수신측에서 송신측에 윈도우 사이즈(수신 확인을 기다리지 않고 묶어서 송신할 수 있는 데이터 양)를 통지하기위해 사용. 

체크섬(checksum) 16 오류 유무를 검사하기 위한 것.

긴급 포인터

(urgent pointer)

16 긴급하게 처리해야 할 데이터의 위치를 나타냄.
옵션 가변 길이

위의 헤더 필드 이외의 제어정보를 기록하기 위해 헤더에 옵션 필드를 추가할 수 있음.

그러나 접속 동작을 제외하면 옵션 필드를 사용하는 예는 적음.

<성공과 실패를 결정하는 1%의 네트워크 원리 표 2-1>

 

 

 

 

 

wireshark 로 분석한 헤더다. 

 

보기 쉽게 노란색 밑줄을 쳐놓았다.