컴퓨터 네트워크보고서제 출 일 : 2015년 6월 17일제 출 자 :교 수 명 :강의이름 : 컴퓨터 네트워크TCP 패킷 분석을 위해 네이버에 접속했다. 검색창 을 누르자 마자,3-way handshaking이 발생해, 내 컴퓨터(클라이언트) 와 서버가 연결 설정 하는 걸 볼 수 있었다.첫 번째 패킷을 분석하면,MSS가 1460이다. 이는, 내(Client)가 네이버(Server)에 데이터를 보낼시, 보낼 수 있는 최대 데이터량이다.Source Port가 55613 이므로, 내가 네이버 서버랑 연결하기 위해 개방한 포트는 55613임을 알 수 있고, Destination Port가 80이므로, 네이버 서버의 개방된 포트는 80임을 알 수 있다. 이 포트는 또한 잘 알려진(well-known port) Http통신 포트이다. Sequence number 가 0으로 찍혔다. 이는, 클라이언트의 능동개방시,(active-open) 서버에 수동개방(passive-open)을 위해 보내주는 패킷이므로, 아직 sequence number를 부여 받지는 않았다. 하지만, Syn 패킷이므로 Sequence number를 하나 점유한다. Acknowlegement number가 0으로 찍힌다. Ack은 가상연결한 상대방과의 연결 여부를 위한 하나의 대화기법인데, 아직 일방적으로 패킷을 보낸 상태이므로, 0이 찍힌것이다.Header Length는 32 bytes이다. TCP의 헤더는 원래 20바이트 이므로 Options 가 12bytes를 차지 한 다는 것을 알 수 있었다. Window Size는 8192이다. Window Size는 rwnd(수신자)와 cwnd 사이에서 결정된다. Cwnd의 처음값은 보통 느린시작(slow-start)알고리즘으로 1MSS 만큼 size가 배정된다. Rwnd는 서버가 Ack를 날리기 전 까지 받을 수 있는 최대 데이터 허용량이다. 이 둘 중, 더 작은 window size를 선택한다. Checksum이 적용 된 것을 볼 수 있다. UDP와 달리 TCP는 Checksum이 필 수 이다. 앞서, Header Length를 통해 Options의 크기를 예측할 수 있었는데, 그 수치가 options에 찍혀있다. 이어서, 두 번째 패킷을 분석하면네이버(Server)에서 나(Client)에게 준 패킷이므로, 첫 번째 패킷의 SoucePort와 Destination Port가 바뀐 것을 알 수 있다. 똑같이 이 패킷도 서버 입장에서는 첫 번째로 나(Client)에게 패킷을 주는 것이므로, Sequnece number가 0이다. 데이터가 없지만, Syn+Ack 패킷이므로 Sequence number를 하나 점유한다. Header값이 24바이트므로, options가 4바이트를 차지 하는 것을 알 수 있다. Flag를 열어보면, Ack 와 Syn에 값이 셋팅(1)된 것 을 알 수 있다. 서버에서도 나에게 데이터를 전송 할 수 있으므로(양방향 연결 서비스) Window Size값이 셋팅 된 것을 볼 수 있다.아래의 세 번째 패킷을 분석하면,네이버(Server)가 나(Client)에게 준 두번째 패킷(Client의 능동개방에 대해 Server가 수동개방을 한다는 내용의 패킷)을 잘 받았다는 것 을 네이버(Server)에게 알려야 할 의무(TCP의 연결 지향성)가 있다. 따라서 3번 패킷은, 그러한 내용이 담겨져 있다. 앞서 1번패킷에서 Sequence Number를 하나 점유 했으므로, 이 패킷의 시작 Sequence Number는 1이다. 하지만, 데이터가 없는 Ack 패킷은 Sequence Number를 점유 하지 않는다. 따라서, 다음에 나오는 패킷의 Sequnce Number는 여전히 1로 시작한다는 의미이다. Acknowlege Number가 1인 이유는, 2번째 패킷의 Sequnece Number가 0이기 때문이다. 이는, Sequence Number 0까지 잘 받았다는 의미로 Number값에 +1을 한값을 Acknowlege Number로 셋팅해 패킷을 보낸다. Header Length가 20이므로 Options에는 0바이트 차지한다는 것을 알 수 있다. Window Size의 최대 크기는 65535인데, 그 Size에 가까운 65280이 찍힌 것을 알 수 있다. 이렇게 3-way handshaking 방식을 통해서 연결된 것을 볼 수 있다. 다음으로는 데이터 전송 층이다.1번째 패킷은 위에서 봤던, 연결설정 부분의 마지막 패킷이다.2번째 패킷을 분석해보면,TCP Segment Len : 711을 볼 수 있는데 세그먼트는 TCP의 패킷을 뜻 한다. 즉, 711바이트의 데이터가 들어 있다는 뜻이다. 711만큼의 데이터를 차지하므로, Next sequence Number는 712로 예약된 것을 알 수 있다. flag또한 Push falg가 1로 셋팅됨으로써, 데이터를 Application 계층으로 바로 데이터를 보내라는 명령까지 포함하고 있다.3번째 패킷은 데이터를 잘 받았다는 패킷이다.Acknowledgment number는 711까지의 데이터를 확인 했다는 의미로 Ack number를 712로 셋팅해 보낸다.중간에, 데이터 전송 오류도 잡혔다.Duplicate 오류인데, 711이후의 데이터가 하나 빠져서, 711까지의 데이터까지가 연속적인 데이터라는걸 알리는 Ack 패킷을 3번 보내는 것이다.마지막으로 연결종료 패킷이다.2번째 패킷을보면 Client 측에서 Server에게 FIN+ACK 패킷을 보내는걸 볼 수 있다. 이는 Client 측에서 Server에게 자신이 더 이상 Server에게 보낼 데이터가 더 이상 없다는 의미이다.3번째 패킷은, FIN 한다는 패킷을 받고 Server는 Client에게 FIN패킷을 잘 받았고, 더 이상 Client의 데이터는 없음을 안다는 의미로 Ack 패킷을 날리는것이다.이렇게 3가지 구성요소가 기본적으로 Client와 Server의 TCP연결이 어떻게 되는지 보여준다.